Signatur
Beschreibung
sodium_bin2hex() wandelt einen beliebigen binären String (z. B. einen kryptografischen Schlüssel, einen Hash oder einen Nonce) in eine hexadezimale Zeichenkette um. Jedes Byte des Eingabe-Strings wird dabei als zwei Hexadezimalzeichen dargestellt.
Im Gegensatz zur Standard-Funktion bin2hex() ist diese Implementierung darauf ausgelegt, in konstanter Zeit zu arbeiten, sodass sie gegen Timing-basierte Seitenkanal-Angriffe resistent ist. Für sicherheitskritische Anwendungen – etwa das Kodieren von geheimen Schlüsseln oder Tokens – sollte daher sodium_bin2hex() bevorzugt werden.
Die Funktion ist Teil der Sodium-Erweiterung (libsodium), die seit PHP 7.2 im Kern enthalten ist und eine moderne, sichere Kryptografie-Bibliothek bereitstellt. Die Rückkonvertierung erfolgt mit sodium_hex2bin().
Typische Einsatzszenarien sind das Speichern oder Übertragen von kryptografischen Zufallsstrings, Schlüsseln oder MAC-Werten in einem menschenlesbaren Format.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Der binäre Eingabe-String, der in hexadezimale Schreibweise umgewandelt werden soll. Häufig das Ergebnis einer kryptografischen Operation wie random_bytes() oder sodium_crypto_secretbox(). |
Rückgabewert
Beispiele
Zufälligen Schlüssel als Hex-String kodieren
<?php
// 32 kryptografisch sichere Zufallsbytes erzeugen
$binaryKey = random_bytes(32);
// In Hex konvertieren (z. B. zum Speichern in einer Datenbank oder Konfigurationsdatei)
$hexKey = sodium_bin2hex($binaryKey);
echo 'Hex-Schlüssel (' . strlen($hexKey) . ' Zeichen): ' . $hexKey . PHP_EOL;
Hin- und Rückkonvertierung eines binären Werts
<?php
$original = random_bytes(16);
// Binär → Hex
$hex = sodium_bin2hex($original);
echo 'Hex: ' . $hex . PHP_EOL;
// Hex → Binär (Rückkonvertierung)
$binary = sodium_hex2bin($hex);
if (hash_equals($original, $binary)) {
echo 'Rückkonvertierung erfolgreich: Daten stimmen überein.' . PHP_EOL;
} else {
echo 'Fehler: Daten stimmen nicht überein.' . PHP_EOL;
}
Kryptografischen MAC als Hex ausgeben
<?php
$key = sodium_crypto_auth_keygen();
$message = 'Wichtige Nachricht';
// MAC berechnen
$mac = sodium_crypto_auth($message, $key);
// MAC als Hex darstellen
$macHex = sodium_bin2hex($mac);
echo 'MAC (Hex): ' . $macHex . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitshinweis: Obwohl sodium_bin2hex() timing-sicher implementiert ist, sollten die resultierenden Hex-Strings von geheimen Schlüsseln oder Tokens niemals in Logs, Fehlermeldungen oder HTTP-Antworten preisgegeben werden.
Vergleiche von Hex-kodierten Geheimnissen sollten immer mit hash_equals() oder sodium_memcmp() erfolgen, niemals mit == oder ===, um Timing-Angriffe zu vermeiden.
Die Funktion wirft eine SodiumException, wenn die Sodium-Erweiterung nicht korrekt geladen ist, was in der Praxis bei PHP >= 7.2 jedoch nicht vorkommen sollte.