So prüfen Sie einen Base64-String
- Fügen Sie den String in Zu prüfendes Base64 ein. Zeilenumbrüche, PEM-Rahmen und
data:-Präfixe dürfen drinbleiben; sie werden als Befunde gemeldet, und der Rest wird trotzdem analysiert. - Lesen Sie das Urteil oben. Jedes Problem wird mit seiner Position aufgeführt, zum Beispiel „in Zeile 3, Spalte 17 (Zeichen 169)“.
- Unter Ihre Eingabe mit markierten Problemen sehen Sie die fehlerhaften Zeichen an Ort und Stelle markiert.
- Unter Welche Base64-Varianten erfüllt sie? erfahren Sie, ob der String als Standard-, ungepaddetes, URL-sicheres, MIME- oder PEM-Base64 gültig ist, und warum nicht, wo er scheitert.
- Drücken Sie Reparieren, um in den Reparaturmodus zu wechseln, der den String bereinigt.
Was der Validator prüft
- Zeichen außerhalb des Alphabets, angezeigt mit ihrem Unicode-Codepoint, sodass unsichtbare wie ein geschütztes Leerzeichen (U+00A0) oder ein Leerzeichen mit Nullbreite (U+200B) sichtbar werden.
- Gemischte Alphabete:
+und/aus Standard-Base64 zusammen mit-und_aus Base64URL in einem String. =in der Mitte, was fast immer bedeutet, dass zwei kodierte Werte zusammengeklebt wurden.- Unmögliche Länge: Eine Länge, die nach Entfernen des Paddings bei Division durch 4 den Rest 1 lässt, kann aus keinem Encoder stammen. Ein Zeichen fehlt oder ist zu viel.
- Padding: fehlend, zu viel oder passend zur Datenlänge.
- Nicht kanonische Bits am Ende im letzten Zeichen (RFC 4648 §3.5).
- Leerraum und Zeilenumbruch: Leerzeichen und Tabs, die Zeilenbreite und ob die Zeilen auf CRLF, LF oder gemischt enden.
Details ergänzt Länge, Länge mod 4, Padding-Status, Alphabet, dekodierte Größe und den erkannten Inhaltstyp. Die markierte Kopie der Eingabe ist auf die ersten 20.000 Zeichen begrenzt, die Analyse umfasst aber immer den ganzen String.
Gleicher String, verschiedene Decoder
„Gültig“ hängt davon ab, wer fragt. Diese fünf Strings liefen durch vier gängige Decoder (Python 3.13, Node.js 24, das WHATWG-atob und GNU coreutils 9.7):
| Eingabe | Problem | Python b64decode(s, validate=True) | Node Buffer.from(s, "base64") | atob(s) | base64 -d |
|---|---|---|---|---|---|
SGVsbG8gd29ybGQ | fehlendes = | Fehler | Hello world | Hello world | Hello world |
SGVsbG9= | nicht kanonisches letztes Zeichen | Hello | Hello | Hello | Fehler |
SGVsbG8=V29ybGQ= | zwei Werte zusammengeklebt | Fehler | Hello (der Rest wird verworfen) | Fehler | HelloWorld |
SGVsbG8gd | Rest 1 | Fehler | Hello | Fehler | Fehler |
SGVs bG8= | ein Leerzeichen | Fehler | Hello | Hello | Fehler |
Die gefährliche Zelle ist Node, das für die zusammengeklebte Eingabe stillschweigend Hello zurückgibt und dabei die Hälfte der Daten ohne Fehler verliert. Dieses Tool meldet deshalb jede Abweichung, auch solche, die Ihr eigener Decoder toleriert. Die Variantentabelle sagt Ihnen dann, welches strenge Format der String erfüllt.
Ist ein gültiger String wirklich Base64?
abcd, test und 1234 sind alle gültiges Base64. Jedes davon dekodiert zu drei zufällig wirkenden Bytes. Deshalb beantwortet das Tool auch Ist das wirklich Base64? mit einer Wertung von 0 bis 100 und den Gründen dahinter, jeweils markiert als Hinweis für oder gegen Base64:
- dafür: korrektes Padding, gemischte Groß- und Kleinbuchstaben mit Ziffern, hohe Zeichenvielfalt, ein Anfang mit
eyJ(Base64 für{", typisch für JSON und JWTs) oder Bytes, die zu einem bekannten Dateityp oder lesbarem Text dekodieren; - dagegen: nur Buchstaben (könnte ein Wort sein), nur Hex-Ziffern (könnte ein Hex-String sein), nur Ziffern (wahrscheinlich eine Zahl), nur eine Schreibweise oder ein sehr kurzer String.
Betrachten Sie die Wertung als Hinweis: Sie ist eine Heuristik, und ein kurzer String kann sie in beide Richtungen täuschen.
Base64 im Code prüfen
Der strengste praktikable Test ist ein Hin- und Rückweg: dekodieren, neu kodieren und vergleichen. Er lehnt Leerraum, fehlendes Padding und nicht kanonische Enden in einem Schritt ab.
import base64
def is_canonical_base64(s):
try:
return base64.b64encode(base64.b64decode(s, validate=True)).decode() == s
except ValueError:
return False
In Node.js lautet dieselbe Idee Buffer.from(s, "base64").toString("base64") === s. Ein regulärer Ausdruck wie ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$ prüft Alphabet und Länge, akzeptiert aber SGVsbG9= und den leeren String. URL-sichere Strings wandeln Sie zuerst um oder verwenden das passende Alphabet; siehe Base64 vs. Base64URL. Fehlermeldungen einzelner Sprachen sind unter Base64-Fehler gesammelt.
Häufige Fragen
Woran erkenne ich, ob ein String Base64 ist?
Streng genommen ist ein String gültiges Standard-Base64, wenn er nur A–Z, a–z, 0–9, + und / verwendet, seine Länge ein Vielfaches von 4 ist und höchstens zwei = am Ende stehen. Diesen Test bestehen auch viele normale Wörter, deshalb ergänzt das Tool eine Wertung von 0 bis 100, je nachdem, wie der String aussieht und wozu er dekodiert.
Warum dekodiert mein Base64 in einer Sprache, scheitert aber in einer anderen?
Decoder sind unterschiedlich streng. Nodes Buffer.from akzeptiert fast alles, Pythons b64decode(s, validate=True) lehnt fehlendes Padding ab, und GNU base64 -d lehnt nicht kanonische letzte Zeichen ab. Die Tabelle oben zeigt dieselben fünf Strings in vier Decodern.
Was ist nicht kanonisches Base64?
Das letzte Zeichen trägt ein paar ungenutzte Bits, die null sein sollten. SGVsbG8= und SGVsbG9= dekodieren beide zu Hello, aber nur der erste ist kanonisch. RFC 4648 erlaubt Decodern, den zweiten abzulehnen, und erneutes Kodieren erzeugt ihn nie.
Ist ein gültiger Base64-String sicher zu dekodieren?
Gültigkeit sagt nichts über den Inhalt. Der Abschnitt Details zeigt die dekodierte Größe und den erkannten Inhaltstyp mit einem Link zum passenden Decoder, damit Sie vor dem Speichern wissen, ob es Text, ein Bild oder etwas anderes ist.