Start · Sprachen · PHP · Referenz · sodium_base642bin

sodium_base642bin

Funktion

Dekodiert eine Base64-kodierte Zeichenkette in das Binärformat unter Verwendung der libsodium-Varianten.

seit PHP 7.2.0 Kategorie: crypto

Signatur

sodium_base642bin(string $base64, int $id, string $ignore = ''): string|false

Beschreibung

sodium_base642bin ist das Gegenstück zu sodium_bin2base64 und dekodiert eine Base64-kodierte Zeichenkette zurück in rohe Binärdaten. Die Funktion gehört zur libsodium-Erweiterung und unterstützt verschiedene Base64-Varianten, die über den Parameter $id ausgewählt werden.

Im Vergleich zur Standard-PHP-Funktion base64_decode bietet diese Funktion Unterstützung für URL-sichere Base64-Kodierungen sowie Varianten ohne Padding, was insbesondere in kryptografischen Anwendungen und bei der Übertragung von Binärdaten in URLs relevant ist.

Über den optionalen Parameter $ignore können Zeichen angegeben werden, die beim Dekodieren ignoriert werden sollen – etwa Leerzeichen, Zeilenumbrüche oder andere Trennzeichen, die möglicherweise in der Base64-Zeichenkette enthalten sind.

Die Funktion gibt false zurück, wenn die Eingabe ungültig ist oder nicht dekodiert werden kann, was eine einfache Fehlerbehandlung ermöglicht.

Parameter

Name Typ Default Beschreibung
$base64 Pflicht string Die Base64-kodierte Zeichenkette, die dekodiert werden soll.
$id Pflicht int Die Base64-Variante. Mögliche Werte sind: SODIUM_BASE64_VARIANT_ORIGINAL (Standard-Base64 mit Padding), SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING (Standard-Base64 ohne Padding), SODIUM_BASE64_VARIANT_URLSAFE (URL-sicheres Base64 mit Padding) und SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING (URL-sicheres Base64 ohne Padding).
$ignore string '' Eine Zeichenkette mit Zeichen, die bei der Dekodierung ignoriert werden sollen, z. B. Leerzeichen oder Zeilenumbrüche ("\r\n ").

Rückgabewert

Typ
string|false
Beschreibung
Gibt die dekodierte Binärzeichenkette zurück. Bei ungültiger Eingabe oder einem Fehler wird false zurückgegeben.

Beispiele

Einfache Dekodierung mit Standard-Base64

<?php
// Zufällige Binärdaten erzeugen
$binary = random_bytes(16);

// Binärdaten in Base64 kodieren
$base64 = sodium_bin2base64($binary, SODIUM_BASE64_VARIANT_ORIGINAL);
echo 'Base64: ' . $base64 . PHP_EOL;

// Base64 zurück in Binärdaten dekodieren
$decoded = sodium_base642bin($base64, SODIUM_BASE64_VARIANT_ORIGINAL);

// Vergleich der Originaldaten mit den dekodierten Daten
if (hash_equals($binary, $decoded)) {
    echo 'Dekodierung erfolgreich – Daten stimmen überein.' . PHP_EOL;
}
Base64: <zufälliger Base64-String> Dekodierung erfolgreich – Daten stimmen überein.

URL-sichere Base64-Dekodierung ohne Padding

<?php
// Typisches Szenario: API-Token aus URL-Parameter dekodieren
$urlToken = 'abc-defgh_ijklmnop'; // URL-sicherer Base64-String (keine + oder /)

$decoded = sodium_base642bin($urlToken, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING);

if ($decoded !== false) {
    echo 'Dekodierte Länge: ' . strlen($decoded) . ' Bytes' . PHP_EOL;
    echo 'Hex: ' . bin2hex($decoded) . PHP_EOL;
} else {
    echo 'Dekodierung fehlgeschlagen.' . PHP_EOL;
}
Dekodierte Länge: 13 Bytes Hex: 69b73b7a1e787e2271e2729ba7

Ignorieren von Leerzeichen und Zeilenumbrüchen

<?php
// Base64-String mit Zeilenumbrüchen (z. B. PEM-Format)
$base64WithNewlines = "YWJj\nZGVm\nZ2hp";

// Zeilenumbrüche beim Dekodieren ignorieren
$decoded = sodium_base642bin(
    $base64WithNewlines,
    SODIUM_BASE64_VARIANT_ORIGINAL,
    "\n"
);

if ($decoded !== false) {
    echo 'Dekodiert: ' . $decoded . PHP_EOL;
} else {
    echo 'Dekodierung fehlgeschlagen.' . PHP_EOL;
}
Dekodiert: abcdefghi

// Wichtig · Fallstricke

Sicherheitshinweis: Die Funktion führt eine strikte Validierung der Eingabe durch. Ungültige Base64-Zeichen (abgesehen von den ignorierten Zeichen) führen zur Rückgabe von false. Dies ist sicherer als base64_decode, das mit $strict = false ungültige Zeichen stillschweigend ignoriert.

Die Konstanten für den $id-Parameter (SODIUM_BASE64_VARIANT_*) sind erst ab PHP 7.2.0 verfügbar und erfordern die aktivierte sodium-Erweiterung (in PHP 7.2+ standardmäßig gebündelt).

Achte darauf, dieselbe Variante beim Kodieren (sodium_bin2base64) und Dekodieren zu verwenden. Eine Mischung der Varianten führt zu false oder fehlerhaften Ergebnissen.