Warum sieht mein decodiertes Base64 wie Müll aus?
Sie haben etwas decodiert und eine Folge bedeutungsloser Zeichen, Fragezeichen oder Ersatzsymbole erhalten. Dafür gibt es zwei recht verschiedene Gründe, und sie verlangen entgegengesetzte Reaktionen — es lohnt sich also zu wissen, welchen davon Sie vor sich haben.
Der erste: Ihre Eingabe war von vornherein kein Base64. Das Base64-Alphabet besteht aus Buchstaben, Ziffern, Plus und Schrägstrich — womit sehr viel gewöhnlicher Text allein von der Form her als gültiges Base64 durchgeht. Ein Hex-Digest, eine UUID ohne Bindestriche, ein Git-Commit-Hash und schlichte englische Wörter wie "test" oder "Password" bestehen jede Zeichenprüfung. Sie zu decodieren ist ein zulässiger Vorgang, der Bytes erzeugt, die nie Text waren; das Ergebnis ist Rauschen. Der Decoder ist nicht gescheitert — er hat eine Frage beantwortet, die Sie nicht stellen wollten.
Der zweite: Die Eingabe war wirklich Base64, und die Nutzlast ist einfach kein Text. Base64 existiert, um beliebige Bytes durch Kanäle zu tragen, die nur Zeichen annehmen, und diese Bytes sind häufig ein Bild, ein komprimiertes Archiv, ein Zertifikat, eine Protobuf-Nachricht oder ein verschlüsselter Block. Das Decodieren hat einwandfrei funktioniert. Was herauskam, war nie dazu gedacht, als Buchstaben gelesen zu werden.
Meist erkennen Sie es an den ersten Bytes des Ergebnisses. Ein PNG beginnt nach einem nicht druckbaren Byte mit den Buchstaben PNG; ein Gzip-Strom beginnt mit zwei festen Bytes; ein PDF trägt eine sichtbare Kennung am Anfang; ein Zertifikat in DER-Form beginnt mit einem Strukturbyte statt mit etwas Lesbarem. Beginnt die Ausgabe mit einer erkennbaren Signatur, haben Sie echte Daten in einem Format vor sich und keinen fehlgeschlagenen Decodiervorgang.
Die andere Probe ist die Umkehrbarkeit. Encodieren Sie das Ergebnis erneut und vergleichen Sie es mit dem, womit Sie angefangen haben. Echtes Base64 durchläuft diesen Weg unverändert. Ein Wert, der nur base64-förmig war, meistens nicht, weil seine Länge oder Auffüllung nie von einem Encoder stammte.
Am wichtigsten ist das für Werkzeuge, die wiederholt decodieren. Eines, das abträgt, solange die Eingabe noch decodierbar aussieht, zerstört irgendwann einen völlig intakten Wert, indem es ihn einmal zu oft decodiert, und meldet eine Schichtzahl, die eine nie vorhandene Schicht enthält. An der richtigen Stelle aufzuhören und zu sagen, warum, ist der Teil, der wirklich schwierig ist.