Start · Sprachen · PHP · Referenz · sodium_hex2bin

sodium_hex2bin

Funktion

Dekodiert eine hexadezimal kodierte Zeichenkette in eine binäre Zeichenkette, optional unter Ignorierung bestimmter Trennzeichen.

seit PHP 7.2.0 Kategorie: crypto

Signatur

sodium_hex2bin(string $hex, string $ignore = ''): string

Beschreibung

sodium_hex2bin() ist die libsodium-kompatible Variante der Hex-zu-Binär-Konvertierung und wandelt eine hexadezimal kodierte Zeichenkette (z. B. "48656c6c6f") zurück in die entsprechenden rohen Binärdaten um. Sie ist als kryptografisch sicheres Pendant zu hex2bin() konzipiert, da die Implementierung in libsodium einen zeitkonstanten Vergleich (constant-time) durchführt und damit Timing-Angriffe erschwert.

Besonders praktisch ist der optionale zweite Parameter $ignore: Damit können Trennzeichen wie Doppelpunkte (:), Leerzeichen oder Bindestriche angegeben werden, die in der Eingabe-Zeichenkette vorkommen dürfen und beim Dekodieren einfach übersprungen werden. Dies erlaubt die Verarbeitung von Hex-Darstellungen wie "48:65:6c:6c:6f" ohne manuelle Vorverarbeitung.

Die Funktion eignet sich immer dann, wenn Schlüssel, Nonces, Hashes oder andere kryptografische Rohdaten im Hex-Format vorliegen (z. B. aus Konfigurationsdateien oder Datenbanken) und sicher zurückkonvertiert werden müssen. In Verbindung mit sodium_bin2hex() bildet sie ein symmetrisches Paar für die sichere Serialisierung kryptografischer Werte.

Da sodium_hex2bin() Teil der Sodium-Extension ist, steht sie ab PHP 7.2 nativ zur Verfügung, ohne dass eine externe Bibliothek eingebunden werden muss.

Parameter

Name Typ Default Beschreibung
$hex Pflicht string Die hexadezimal kodierte Eingabe-Zeichenkette. Darf nur gültige Hex-Zeichen (0–9, a–f, A–F) sowie die in $ignore definierten Trennzeichen enthalten.
$ignore string '' Eine Zeichenkette, deren einzelne Zeichen beim Dekodieren in $hex ignoriert (übersprungen) werden. Typische Werte sind ":", "-" oder " " für formatierte Hex-Ausgaben.

Rückgabewert

Typ
string
Beschreibung
Gibt die dekodierte binäre Zeichenkette zurück. Enthält $hex ungültige Zeichen (die nicht in $ignore stehen), wird eine \SodiumException geworfen.

Beispiele

Einfache Hex-zu-Binär-Konvertierung

<?php
$hex = sodium_bin2hex('Geheimschlüssel!');
echo $hex . PHP_EOL; // z. B. 476568656....

$binary = sodium_hex2bin($hex);
echo $binary . PHP_EOL; // Geheimschlüssel!
476568656.... Geheimschlüssel!

Hex-Zeichenkette mit Trennzeichen dekodieren

<?php
// Hex-String mit Doppelpunkten als Trennzeichen (z. B. aus einem Zertifikat-Fingerprint)
$formattedHex = '48:65:6c:6c:6f';

$binary = sodium_hex2bin($formattedHex, ':');
echo $binary . PHP_EOL; // Hello

// Längere Variante mit Leerzeichen als Trennzeichen
$spacedHex = '48 65 6c 6c 6f';
$binary2 = sodium_hex2bin($spacedHex, ' ');
echo $binary2 . PHP_EOL; // Hello
Hello Hello

Schlüssel aus Konfigurationsdatei laden und verwenden

<?php
// Konfigurierter Schlüssel im Hex-Format (z. B. aus .env oder Datenbank)
$hexKey = getenv('ENCRYPTION_KEY_HEX');
// Annahme: ENCRYPTION_KEY_HEX enthält einen 64 Zeichen langen Hex-String (32 Byte)

try {
    $binaryKey = sodium_hex2bin($hexKey);
    if (mb_strlen($binaryKey, '8bit') !== SODIUM_CRYPTO_SECRETBOX_KEYBYTES) {
        throw new RuntimeException('Ungültige Schlüssellänge.');
    }
    echo 'Schlüssel erfolgreich geladen. Länge: ' . mb_strlen($binaryKey, '8bit') . ' Byte' . PHP_EOL;
} catch (\SodiumException $e) {
    echo 'Fehler beim Dekodieren des Schlüssels: ' . $e->getMessage() . PHP_EOL;
}
Schlüssel erfolgreich geladen. Länge: 32 Byte

// Wichtig · Fallstricke

Sicherheitshinweis: Im Gegensatz zur Standard-PHP-Funktion hex2bin() arbeitet sodium_hex2bin() in konstanter Zeit (constant-time), um Timing-Angriffe zu verhindern. Für kryptografische Zwecke sollte daher stets diese Funktion bevorzugt werden.

Fehlerbehandlung: Bei ungültigen Hex-Zeichen (die nicht in $ignore enthalten sind) wirft die Funktion eine \SodiumException. Die Eingabe sollte daher vor dem Aufruf validiert oder der Aufruf in einem try-catch-Block gekapselt werden.

Groß-/Kleinschreibung: Die Funktion akzeptiert sowohl Großbuchstaben (A–F) als auch Kleinbuchstaben (a–f), verhält sich also case-insensitiv bei der Hex-Dekodierung.