Start · Sprachen · JavaScript · Referenz · Uint8Array.fromBase64()

Uint8Array.fromBase64()

Methode

Erzeugt ein neues <code>Uint8Array</code> aus den Bytes, die in einem Base64- oder Base64URL-kodierten String stehen.

seit JavaScript ES2026 · Chrome 140, Firefox 133, Safari 18.2 Kategorie: method-property

Signatur

Uint8Array.fromBase64(string, options)

Beschreibung

Uint8Array.fromBase64() ist eine statische Methode, die einen Base64-String direkt in Binärdaten umwandelt. Bisher war dafür meist ein Umweg über atob() nötig: Man bekam einen „binären String“ und musste ihn Zeichen für Zeichen mit charCodeAt() in ein Byte-Array kopieren. Die neue Methode erledigt das in einem Schritt, ist schneller und liefert sofort ein typisiertes Array.

Typische Einsatzfälle sind das Dekodieren von Data-URLs, JWT-Bestandteilen, kryptografischen Schlüsseln und Signaturen (z. B. für die SubtleCrypto-API), von Binär-Anhängen in JSON-APIs oder von WebAuthn-Daten. Über die Option alphabet: "base64url" lassen sich auch URL-sichere Varianten mit - und _ direkt verarbeiten, ohne die Zeichen vorher per replace() umzuschreiben.

ASCII-Leerraum (Leerzeichen, Tabulatoren, Zeilenumbrüche) im Eingabestring wird übersprungen, deshalb funktionieren auch MIME-typisch umbrochene Base64-Blöcke. Ungültige Zeichen lösen dagegen einen SyntaxError aus. Wie mit einem unvollständigen letzten Block (fehlendes Padding) umgegangen wird, steuert die Option lastChunkHandling.

Wenn du in ein vorhandenes Array dekodieren willst, statt ein neues anzulegen, nimm Uint8Array.prototype.setFromBase64(). Die Gegenrichtung übernimmt Uint8Array.prototype.toBase64().

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der Base64- bzw. Base64URL-kodierte String. Leerraum wird ignoriert. Ist der Wert kein String, wird ein TypeError ausgelöst. Eine automatische Umwandlung findet nicht statt.
$options object {} Optionales Objekt mit Einstellungen zum Dekodieren.
$options.alphabet "base64" | "base64url" "base64" Gibt das Alphabet an. "base64" verwendet + und /, "base64url" verwendet - und _. Zeichen aus dem jeweils anderen Alphabet führen zu einem SyntaxError.
$options.lastChunkHandling "loose" | "strict" | "stop-before-partial" "loose" Legt fest, wie der letzte Block behandelt wird.
  • "loose": Padding (=) ist optional, ein Rest aus 2 oder 3 Zeichen wird dekodiert.
  • "strict": Korrektes Padding ist Pflicht, und nicht genutzte Bits im letzten Block müssen 0 sein.
  • "stop-before-partial": Ein unvollständiger letzter Block ohne Padding wird ignoriert. Das ist praktisch beim Dekodieren von Datenströmen.

Rückgabewert

Typ
Uint8Array
Beschreibung
Ein neues Uint8Array mit den dekodierten Bytes. Es hat einen eigenen, frisch angelegten ArrayBuffer.

Beispiele

Base64-String in Bytes und Text umwandeln

const bytes = Uint8Array.fromBase64("SGFsbG8=");
console.log(bytes);

// Bytes als UTF-8-Text interpretieren
const text = new TextDecoder().decode(bytes);
console.log(text);
Uint8Array(5) [72, 97, 108, 108, 111] Hallo

JWT-Payload mit Base64URL dekodieren

const token = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI0MiJ9.signatur";
const [, payloadPart] = token.split(".");

// Kein replace(/-/g, "+") mehr nötig, Padding fehlt bei JWTs ohnehin
const payloadBytes = Uint8Array.fromBase64(payloadPart, { alphabet: "base64url" });
const payload = JSON.parse(new TextDecoder().decode(payloadBytes));
console.log(payload.sub);
42

Unvollständigen letzten Block mit lastChunkHandling steuern

const input = "SGFsbG8"; // Padding "=" fehlt

console.log(Uint8Array.fromBase64(input)); // loose (Standard)
console.log(Uint8Array.fromBase64(input, { lastChunkHandling: "stop-before-partial" }));

try {
  Uint8Array.fromBase64(input, { lastChunkHandling: "strict" });
} catch (err) {
  console.log(err.name);
}
Uint8Array(5) [72, 97, 108, 108, 111] Uint8Array(3) [72, 97, 108] SyntaxError

Funktionsprüfung mit Rückfall auf atob()

const base64ToBytes = (b64) =>
  typeof Uint8Array.fromBase64 === "function"
    ? Uint8Array.fromBase64(b64)
    : Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));

// z. B. Rohschlüssel für die Web Crypto API importieren
const keyBytes = base64ToBytes("AAECAwQFBgcICQoLDA0ODw==");
console.log(keyBytes.length);
16