Start · Sprachen · PHP · Referenz · sodium_bin2base64

sodium_bin2base64

Funktion

Kodiert eine binäre Zeichenkette mit Base64 unter Verwendung einer der von libsodium definierten Varianten.

seit PHP 7.2.0 Kategorie: crypto

Signatur

sodium_bin2base64(string $string, int $id): string

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

Typ
string
Beschreibung
Gibt die Base64-kodierte Zeichenkette zurück. Die Variante bestimmt, ob Padding-Zeichen (=) 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;
z. B.: 4K1qL2z8mN3PvR7sT0uW6xY9aB5cD1eF2hJ3kL4mN5o= z. B.: 4K1qL2z8mN3PvR7sT0uW6xY9aB5cD1eF2hJ3kL4mN5o

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;
}
Kodiert: <base64url-Zeichenkette> Hin- und Rückkodierung erfolgreich – Daten identisch.

// Wichtig · Fallstricke

Varianten-Übersicht:

  • SODIUM_BASE64_VARIANT_ORIGINAL: Standard-Base64 mit Alphabet A–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.