29  Base64-Codierung

Die Base64-Codierung ist ein Verfahren zur Umwandlung von Binärdaten in eine Zeichenkette, die nur aus lesbaren ASCII-Zeichen besteht. Diese Codierung wird häufig verwendet, um binäre Daten über textbasierte Systeme zu übertragen, die möglicherweise nicht mit Binärdaten umgehen können (z.B. E-Mails). Eine weitere Anwendung ist die Einbettung von Bildern in HTML- oder Markdown-Dokumente.
Untenstehende Octocat-Grafik ist ein Beispiel für eine Base64-codierte Grafik.

Base64 codierte Octocat

Sofern die Website in Chrome geöffnet ist, kann die Grafik mit einem Rechtsklick “untersucht” werden. Die “Untersuchung” zeigt den Quellcode der Seite an. Dort kann die Base64-codierte Grafik gefunden werden. Diese beginnt mit data:image/png;base64, und setzt sich mit einer langen Zeichenkette fort. Diese Zeichenkette ist die Base64-Codierung der Grafik.

29.1 Prinzip der Base64-Codierung

Base64 wandelt 3 Bytes (24 Bits) Binärdaten in 4 druckbare ASCII-Zeichen um:

  1. Die Binärdaten werden in 6-Bit-Blöcke aufgeteilt (2^6 = 64 mögliche Werte)
  2. Jeder 6-Bit-Block wird in ein druckbares ASCII-Zeichen umgewandelt
  3. Bei unvollständigen Blocks am Ende werden Füllzeichen (=) hinzugefügt

29.2 Base64-Zeichensatz

Der Base64-Zeichensatz besteht aus 64 Zeichen: - Die Großbuchstaben A-Z (26 Zeichen) - Die Kleinbuchstaben a-z (26 Zeichen) - Die Ziffern 0-9 (10 Zeichen) - Zwei zusätzliche Zeichen, meist ‘+’ und ‘/’ (2 Zeichen)

Diese 64 Zeichen repräsentieren die Werte 0-63 und können mit 6 Bits dargestellt werden.

29.3 Codierungsprozess

  1. Die Binärdaten werden in Gruppen von 3 Bytes (24 Bits) aufgeteilt
  2. Diese 24 Bits werden in vier 6-Bit-Blöcke umgewandelt
  3. Jeder 6-Bit-Wert wird als Index für den Base64-Zeichensatz verwendet

Wenn die Anzahl der zu codierenden Bytes nicht durch 3 teilbar ist: - Bei einem übrig bleibenden Byte: Auffüllen mit vier Nullbits, Codierung ergibt zwei Zeichen und zwei ‘=’-Zeichen - Bei zwei übrig bleibenden Bytes: Auffüllen mit zwei Nullbits, Codierung ergibt drei Zeichen und ein ‘=’-Zeichen

29.4 Beispiele:

29.4.1 Beispiel 1: Codierung von “KBW”

Base64 Beispiel

29.4.2 Beispiel 2: Codierung von “Hallo”

Betrachten wir das Wort “Hallo”:

  1. ASCII-Werte: H=72, a=97, l=108, l=108, o=111
  2. Binär: 01001000 01100001 01101100 01101100 01101111
  3. In 6-Bit-Gruppen aufteilen: 010010 000110 000101 101100 011011 000110 1111
  4. Da die letzte Gruppe nur 4 Bits hat, wird sie mit zwei Nullen aufgefüllt: 010010 000110 000101 101100 011011 000110 111100
  5. Die 6-Bit-Werte sind: 18, 6, 5, 44, 27, 6, 60
  6. Diese werden in Base64-Zeichen umgewandelt: S G F s b G 8 =

Das Ergebnis “SGFsbG8=” ist die Base64-Codierung von “Hallo”.

29.5 Anwendungen der Base64-Codierung

  • E-Mail-Anhänge (MIME)
  • Datenkodierung in URLs
  • Einbettung von Bildern in HTML/CSS (Data-URLs)
  • Übertragung binärer Daten in JSON
  • Speicherung von Binärdaten in XML

Base64 vergrößert die Datenmenge um etwa 33% (da 3 Bytes in 4 Zeichen umgewandelt werden), bietet aber den Vorteil, dass die codierten Daten in jedem Textformat sicher übertragen werden können.