Warum ist mein Base64 zweimal encodiert?
Sie haben eine Base64-Zeichenkette decodiert und wieder Base64 erhalten. Es ist nichts kaputt, und Sie haben nichts falsch gemacht: Der Wert war tatsächlich mehrfach encodiert, und jeder Decodiervorgang trägt genau eine Schicht ab.
Fast niemand encodiert absichtlich doppelt. Es passiert, weil zwei Systeme jeweils ihre Arbeit getan haben, ohne zu wissen, dass das andere sie bereits getan hatte. Ein Dienst encodiert einen Wert, bevor er ihn in ein Feld schreibt; der Transportweg, der die ganze Nachricht trägt, encodiert diese ebenfalls. Ein Kubernetes-Secret enthält einen Wert, der schon Base64 war, als ihn jemand in die YAML-Datei eingefügt hat — und die encodiert ihn erneut. Ein Webhook signiert eine Nutzlast, encodiert die Signatur, und die Zustellkette encodiert den Umschlag. Ein Logsystem encodiert alles, von dem es nicht garantieren kann, dass es druckbar ist, einschließlich eines Feldes, das weiter oben aus demselben Grund encodiert wurde.
Wie viele Schichten es sind, sieht man der Zeichenkette nicht an. Die Ausgabe von Base64 ist gültige Eingabe für Base64, also ist ein einfach verpackter Wert dieselbe Art Zeichenkette wie ein vierfach verpackter. Der einzige sichtbare Hinweis ist die Länge: Jede Schicht macht den Text etwa um ein Drittel länger, tief verschachtelte Werte werden also auffällig groß.
Der Weg hindurch besteht darin, wiederholt zu decodieren, bis die Ausgabe kein Base64 mehr ist. Von Hand heißt das, jedes Ergebnis zurück in die Eingabe zu kopieren und dabei die Übersicht zu verlieren. Genau deshalb lohnt ein Werkzeug, das alle Schichten in einem Schritt abträgt und sagt, wie viele es waren.
Beim Automatisieren gibt es eine Falle, und die sollte man unabhängig vom verwendeten Werkzeug kennen: Auch gewöhnlicher Text ist mitunter gültiges Base64. Ein Decoder, der weiter abträgt, solange die Eingabe bloß decodierbar aussieht, decodiert bereitwillig ein Wort wie "Password" zu Rauschen und meldet eine Schicht, die es nie gab. Richtig aufzuhören ist schwerer als zu decodieren, und wer eine Schichtzahl nennt, ohne jede Schicht zu prüfen, nennt eine Vermutung.