Ein abschließendes = ist Padding und kein Zeichen des ursprünglichen Texts. Base64 stellt drei Bytes mit vier Zeichen dar. Eine letzte Gruppe aus einem Byte benötigt ==, eine aus zwei Bytes benötigt = im gepolsterten Format.
Bytes statt Buchstaben zählen
Jedes Datenzeichen steht für sechs Bits. Drei Bytes ergeben 24 Bits und vier Zeichen. Umlaute und Emojis können mehrere UTF-8-Bytes belegen: 😀 belegt vier Bytes und ergibt 8J+YgA==. Die Tabelle vergleicht Eingaben aus einem, zwei und drei Bytes.
Fehlendes Padding wiederherstellen
Wenn ungepolsterte Eingaben erlaubt sind, entferne Leerzeichen und prüfe die Länge modulo 4. Rest 2: == ergänzen; Rest 3: = ergänzen; Rest 0: nichts ergänzen. Rest 1 bedeutet ungültige oder abgeschnittene Daten und lässt sich mit = nicht reparieren. Prüfe das von der API erwartete Format.
Warum Zg funktioniert und Zg= scheitert
Decodex ergänzt das vollständig fehlende Padding von Zg und liefert f. Zg== ist ebenfalls gültig. Zg= ist nur teilweise gepolstert und hat eine falsche Gesamtlänge, deshalb wird es abgelehnt. Auch A=AA und Zg=== scheitern. Wiederholtes Hinzufügen oder Entfernen von = kann einen Kopierfehler verdecken.
Beispiel ausprobieren
| Text | UTF-8 bytes | Base64 | Padding |
|---|---|---|---|
f | 1 | Zg== | == |
fo | 2 | Zm8= | = |
foo | 3 | Zm9v | — |
Häufige Fragen
Endet jede Base64-Zeichenfolge mit =?
Nein. Ist die Bytezahl durch drei teilbar, ist kein Padding nötig. Manche Protokolle lassen es ausdrücklich weg.
Quellen
Weitere Base64-Anleitungen
Base64 und Base64URL: Unterschiede, Padding und Beispiele
Vergleiche Base64 und Base64URL, + / und - _, Padding und UTF-8-Dekodierung anhand geprüfter Beispiele.
JavaScript und Unicode-Base64: btoa()-Fehler mit UTF-8 beheben
Umlaute, Koreanisch und Emojis mit TextEncoder kodieren und mit atob und TextDecoder dekodieren. Geprüfter UTF-8-Code mit Beispielen.
