Eine praktische Anleitung zu Base64: Bits, Auffüllung und Validierung

Verfolgen Sie Bytes durch Sechs-Bit-Gruppen, berechnen Sie die Ausgabegröße und unterscheiden Sie kanonische Base64 von wiederherstellbaren Formatierungsproblemen.

Base64 ist eine Darstellung von Bytes unter Verwendung eines eingeschränkten Textalphabets. Dies ist nützlich, wenn ein Transport Text akzeptiert, die Nutzlast jedoch binär ist. Der Vorgang ist umkehrbar: Ein korrekter Decoder stellt die ursprünglichen Bytes wieder her, einschließlich Nullen und Werte, die keine gültigen Zeichen sind. Die Entscheidung, wie diese Bytes interpretiert werden sollen, ist ein separater Schritt.

Aus drei Bytes werden vier Zeichen

Ein Byte enthält acht Bits. Drei Bytes ergeben 24 Bits, die gleichmäßig in vier Gruppen mit je sechs Bits aufgeteilt werden. Jede Gruppe wählt eines von 64 Zeichen des Alphabets aus. Das Standardalphabet enthält Großbuchstaben, Kleinbuchstaben, Ziffern, das Pluszeichen (+) und den Schrägstrich (/). Für den ASCII-Text Man, die Bytes sind 4d 61 6e in hexadezimaler Form, und die codierte Ausgabe ist TWFu.

Input bytes:  01001101 01100001 01101110
Six-bit sets: 010011 010110 000101 101110
Indexes:      19     22     5      46
Output:       T      W      F      u

Padding beschreibt die letzte Gruppe

Wenn ein Byte übrig bleibt, besteht die Ausgabe aus zwei Alphabetzeichen und zwei Gleichheitszeichen. Zwei verbleibende Bytes ergeben drei Alphabetzeichen und ein Gleichheitszeichen. Somit M wird TQ==, während Ma wird TWE=. Padding ist Teil der Struktur. Das zufällige Hinzufügen von Gleichheitszeichen kann ein fehlendes Nutzdatenzeichen nicht wiederherstellen. Für eine kanonische Kodierung müssen auch die ungenutzten Bits im letzten Alphabetzeichen null sein.

Für n Eingabebytes, aufgefüllte Ausgabe hat 4 × ceil(n / 3) Zeichen. Eine Datei mit 1.024 Bytes ergibt daher 1.368 Zeichen, bevor ein Data-URI-Präfix oder Zeilenumbrüche hinzukommen. Base64 ist keine Komprimierung, obwohl eine separate Komprimierung beim Transport die endgültige Übertragungsgröße verringern kann.

Vor der Interpretation validieren

Verwenden Sie den strikten Modus, wenn Sie einen Produzenten anhand eines definierten Protokolls testen. Verwenden Sie den Kompatibilitätsmodus, wenn eine bekannte Quelle ASCII-Zeilenumbrüche eingefügt, Auffüllungen weggelassen oder einen Daten-URI-Wrapper eingefügt hat. Überprüfen Sie die aufgezeichneten Anpassungen. Unerwartete Zeichensetzung, gemischte Alphabete und ungenutzte Bits ungleich Null verdienen eine Untersuchung und keine stille Löschung.

Überprüfen Sie abschließend die dekodierten Bytes. Gültiges Base64 kann eine ungültige UTF-8-Sequenz, ein abgeschnittenes Bild oder ein unvollständiges PDF enthalten. Eine erfolgreiche Dekodierung bestätigt nur die Kodierungsschicht. Speichern Sie binäre Ergebnisse als Bytes und prüfen Sie deren Struktur mit dem passenden Dateiparser. Die Regeln für Alphabet, Padding und kanonische Bits sind festgelegt in RFC 4648.