Was Base64 ist und wann man es braucht

Base64 ist eine Art, beliebige Bytes mit nur 64 sicheren Zeichen zu schreiben: Groß- und Kleinbuchstaben, Ziffern, Plus und Schrägstrich. Man braucht es, wenn Binärdaten durch einen Kanal müssen, der für Text gebaut ist: E-Mail-Anhänge, als Data-URI in eine Seite eingebettete Bilder, Schlüssel und Zertifikate in PEM-Dateien, JWT-Token.

Das Verfahren ist einfach: Man nimmt drei Byte, also 24 Bit, und teilt sie in vier Gruppen zu sechs. Sechs Bit reichen von 0 bis 63, und jeder Wert entspricht einem Zeichen. Bleiben am Ende ein oder zwei Byte übrig, werden sie mit Nullen aufgefüllt, und das Zeichen = zeigt an, wie viele Zeichen keine Daten tragen. Deshalb ist eine Base64-Zeichenkette immer etwa ein Drittel länger als die Originaldaten.

Base64 ist keine Verschlüsselung: Jeder kann es ohne Schlüssel dekodieren. Es wandelt um, es schützt nicht. Die URL-sichere Variante ersetzt + und / durch - und _, weil die ersten beiden in Webadressen eine Bedeutung haben, und lässt das Padding oft weg.

Häufige Fehler

  • Base64 für eine Methode halten, ein Passwort zu verstecken: Es ist eine Kodierung, die jeder umkehren kann, und bietet keinerlei Sicherheit.
  • Daten als Text dekodieren, die kein Text sind: Ein Bild oder ein Schlüssel in Base64 ergibt Bytes, die kein gültiges UTF-8 bilden, und das ist normal.
  • Die beiden Alphabete mischen: Eine URL-sichere Zeichenkette mit - und _ wird von einem Standard-Decoder abgelehnt oder falsch gelesen, wenn er unbekannte Zeichen überspringt.

Häufige Fragen

Warum endet eine Base64-Zeichenkette mit einem oder zwei =?

Weil die Daten kein Vielfaches von drei Byte waren. Ein übriges Byte ergibt zwei Zeichen und zwei =, zwei Byte ergeben drei Zeichen und ein =. Das Padding sagt dem Decoder, wie viele Bytes er wiederherstellen soll; viele Decoder, auch dieser, akzeptieren es auch, wenn es fehlt.

Um wie viel länger wird eine Datei in Base64?

Aus je drei Byte werden vier Zeichen, also etwa 33 % mehr, aufgerundet auf ein Vielfaches von vier. Aus einem Bild mit 30 kB wird eine Zeichenkette von etwa 40 kB.

Was bedeutet die Big-Endian-Ganzzahl?

Die Bytes werden als eine einzige Zahl gelesen, mit dem ersten Byte als höchstwertiger Ziffer zur Basis 256. Die Bytes 01 00 sind 256 wert. Es ist dieselbe Reihenfolge wie in Netzwerkprotokollen und bei den großen Zahlen der Kryptografie.

Warum zeigt der dekodierte Text seltsame Zeichen oder gar keine?

Weil die Bytes kein UTF-8-Text sind: Es kann ein Bild sein, eine komprimierte Datei oder Text in einer anderen Kodierung wie Latin-1. Dann zählt das Hexadezimal, das die Bytes so zeigt, wie sie sind.

So funktioniert diese Berechnung

Jede Gruppe aus drei Byte b₁ b₂ b₃ bildet die Zahl N = b₁·65536 + b₂·256 + b₃. Die vier Zeichen sind die Positionen ⌊N / 262144⌋, ⌊N / 4096⌋ mod 64, ⌊N / 64⌋ mod 64 und N mod 64 im Alphabet ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/. Das Dekodieren geht den umgekehrten Weg. Die Ganzzahl ist die Summe der Bytes, gewichtet mit 256 hoch ihrer von rechts gezählten Position.