Start · Sprachen · PHP · Referenz · sodium_bin2hex

sodium_bin2hex

Funktion

Konvertiert einen binären String sicher in seine hexadezimale Darstellung, ohne anfällig für Timing-Angriffe zu sein.

seit PHP 7.2.0 Kategorie: crypto

Signatur

sodium_bin2hex(string $string): string

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

Typ
string
Beschreibung
Gibt den hexadezimal kodierten String zurück. Die Länge des Rückgabewerts beträgt immer das Doppelte der Länge des Eingabe-Strings, da jedes Byte durch zwei Hex-Zeichen dargestellt wird.

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;
Hex-Schlüssel (64 Zeichen): a3f2e1... (64 zufällige Hexadezimalzeichen)

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;
}
Hex: 9f4a2c... Rückkonvertierung erfolgreich: Daten stimmen überein.

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;
MAC (Hex): 7e3a9b... (64 Hexadezimalzeichen)

// 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.