Signatur
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
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;
}
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;
}
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;
}
// 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.