Signatur
Beschreibung
sodium_bin2base64() konvertiert eine beliebige Binärzeichenkette in eine Base64-kodierte Darstellung. Im Gegensatz zur Standard-PHP-Funktion base64_encode() bietet diese Funktion Unterstützung für verschiedene Base64-Varianten, die in der SODIUM_BASE64_VARIANT_*-Konstanten definiert sind – darunter originales Base64, URL-sicheres Base64 sowie Varianten mit und ohne Padding.
Die Funktion ist besonders nützlich, wenn kryptografische Rohdaten (z. B. Schlüssel, Signaturen, Nonces) in ein textuell übertragbares Format umgewandelt werden müssen, ohne dabei auf externe Bibliotheken angewiesen zu sein. Die verfügbaren Varianten erlauben eine direkte Anpassung an unterschiedliche Protokollanforderungen, etwa beim Einsatz in URLs oder JWT-Tokens.
Zur Umkehroperation dient sodium_base642bin(), die die Base64-Zeichenkette wieder in Binärdaten zurückwandelt. Beide Funktionen gehören zur libsodium-Erweiterung und sind ab PHP 7.2 standardmäßig verfügbar.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Die zu kodierende Binärzeichenkette, z. B. ein kryptografischer Schlüssel oder ein Hashwert. | |
| $id Pflicht | int | Die zu verwendende Base64-Variante. Gültige Werte sind die Konstanten SODIUM_BASE64_VARIANT_ORIGINAL, SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING, SODIUM_BASE64_VARIANT_URLSAFE und SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING. |
Rückgabewert
=) und URL-sichere Zeichen (- und _ statt + und /) verwendet werden.Beispiele
Zufälligen Schlüssel als Base64 ausgeben
<?php
// 32 Byte zufälliger Schlüssel erzeugen
$key = random_bytes(32);
// Standard-Base64 (mit Padding)
$encoded = sodium_bin2base64($key, SODIUM_BASE64_VARIANT_ORIGINAL);
echo $encoded . PHP_EOL;
// URL-sicheres Base64 (ohne Padding, für Verwendung in URLs oder JWTs)
$encodedUrl = sodium_bin2base64($key, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING);
echo $encodedUrl . PHP_EOL;
Hin- und Rückkodierung mit sodium_base642bin
<?php
// Originaldaten
$binary = sodium_crypto_secretbox_keygen();
// Kodieren
$base64 = sodium_bin2base64($binary, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING);
echo 'Kodiert: ' . $base64 . PHP_EOL;
// Dekodieren und vergleichen
$decoded = sodium_base642bin($base64, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING);
if (hash_equals($binary, $decoded)) {
echo 'Hin- und Rückkodierung erfolgreich – Daten identisch.' . PHP_EOL;
}
// Wichtig · Fallstricke
Varianten-Übersicht:
SODIUM_BASE64_VARIANT_ORIGINAL: Standard-Base64 mit AlphabetA–Z,a–z,0–9,+,/und=-Padding.SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING: Wie Original, aber ohne abschließende=-Zeichen.SODIUM_BASE64_VARIANT_URLSAFE: URL-sicheres Alphabet mit-und_statt+und/, mit Padding.SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING: URL-sicher und ohne Padding – geeignet für JWTs, URLs und HTTP-Header.
Es ist wichtig, beim Aufruf von sodium_base642bin() dieselbe Variante zu verwenden wie bei sodium_bin2base64(), da sonst die Dekodierung scheitert oder falsche Daten liefert.
Für sicherheitskritische Vergleiche dekodierter Daten stets hash_equals() verwenden, um Timing-Angriffe zu vermeiden.