Anleitung
- Fügen Sie den zu prüfenden String in das Eingabefeld ein.
- Lesen Sie das Ergebnis ab: gültig oder ungültig, die erkannte „Variante“ (Standard oder URL-sicher) und die „Dekodierte Größe“.
- Werden „Probleme“ aufgelistet, finden Sie anhand der angegebenen Positionen ungültige Zeichen, Leerraum oder falsch platzierte Auffüllung.
- Sehen Sie sich den erkannten „Inhalt“ an, um festzustellen, ob es sich bei den Daten um Text oder um eine Datei wie PNG, PDF oder ZIP handelt.
Was gültiges Base64 ausmacht
- Alphabet. Erlaubt sind nur
A-Z,a-z,0-9und zwei weitere Zeichen:+und/in Standard-Base64,-und_in Base64URL. Ein String, der beide Paare mischt, wurde meist beschädigt oder aus zwei Quellen zusammengesetzt. - Auffüllung. Das Zeichen
=darf nur am Ende und höchstens zweimal vorkommen. Auffüllung in der Mitte bedeutet meist, dass zwei kodierte Werte aneinandergehängt wurden. - Länge. Mit Auffüllung ist die Länge ein Vielfaches von 4. Ohne Auffüllung ist jede Länge zulässig außer 4n + 1: Ein übrig gebliebenes Zeichen enthält nur 6 Bit, zu wenig für ein Byte.
Strikte Decoder kennen eine weitere Regel: Die ungenutzten niederwertigen Bits des letzten Zeichens müssen null sein. Viele Decoder ignorieren diese Bits, manche jedoch, etwa base64.StdEncoding.Strict() in Go, lehnen den String ab.
Häufige Fehler und ihre Behebung
| Problem | Typische Ursache | Lösung |
|---|---|---|
| Ungültiges Zeichen | Anführungszeichen, Backslashes oder Escapes wie %2B und %3D, die mit dem Wert kopiert wurden | Überflüssige Zeichen entfernen oder zuerst URL-dekodieren |
| Leerzeichen in der Mitte | + wurde zu Leerzeichen, als der Wert eine URL oder ein Formular durchlief | Das + wiederherstellen oder für URLs Base64URL verwenden |
| Länge von 4n + 1 | Wert durch ein Spaltenlimit, eine Logzeile oder unvollständiges Kopieren abgeschnitten | Den vollständigen Wert erneut kopieren |
| Auffüllung in der Mitte | Zwei Base64-Strings wurden aneinandergehängt | Aufteilen und jeden Teil einzeln dekodieren |
| Zeilenumbrüche | MIME- oder PEM-Umbruch | Meist harmlos; dort entfernen, wo eine einzige Zeile verlangt wird |
Gültig heißt nicht sinnvoll
Base64 hat weder Header noch Prüfsumme, die Gültigkeit sagt also nur aus, dass sich ein String dekodieren lässt. Viele gewöhnliche Wörter bestehen die Prüfung: Je vier beliebige Buchstaben bilden eine gültige Gruppe. Deshalb dekodiert der Validator die Daten zusätzlich und gibt Größe und Inhaltstyp an. Lesbarer Text oder eine bekannte Dateisignatur wie PNG, PDF oder ZIP ist ein gutes Indiz dafür, dass es sich wirklich um Base64 handelt; eine Handvoll zufälliger Bytes ist es nicht. Um auch andere Kodierungen zu testen, probieren Sie die Kodierungserkennung aus.
Base64 im Code validieren
// JavaScript: Standard-Base64 mit Auffüllung (passt auch auf einen leeren String)
/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/
# Python: Fehler auslösen, statt ungültige Zeichen zu überspringen
import base64, binascii
try:
base64.b64decode(s, validate=True)
except binascii.Error:
print('invalid')
Häufig gestellte Fragen
Warum wird ein gewöhnliches Wort als gültiges Base64 erkannt?
test etwa ergibt drei Bytes. Prüfen Sie den erkannten Inhaltstyp: Ist das Ergebnis weder lesbarer Text noch ein bekannter Dateityp, war die Eingabe vermutlich nie Base64.Ist Base64 mit Leerzeichen oder Zeilenumbrüchen gültig?
MIME und PEM brechen Base64 in Zeilen um, und die meisten Decoder überspringen Leerraum. JSON-Felder, HTTP-Header, JWTs und Data-URIs erwarten jedoch einen durchgehenden String. Der Validator führt Leerraum gesondert auf, damit Sie entscheiden können, ob er dort, wo der String verwendet wird, eine Rolle spielt.
Ist Base64 ohne =-Auffüllung gültig?
=-Zeichen, bis die Länge ein Vielfaches von 4 ist, wenn ein System den String ablehnt. Strings ohne Auffüllung mit 4n + 1 Zeichen sind niemals gültig.Wie prüfe ich in JavaScript, ob ein String Base64 ist?
atob() innerhalb von try/catch aufzurufen. Beachten Sie, dass atob() bei fehlerhafter Eingabe einen InvalidCharacterError auslöst, Leerraum und fehlende Auffüllung aber stillschweigend akzeptiert und die URL-sicheren Zeichen nicht annimmt.