Base64

So funktioniert die Base64-Kodierung

Stefan
7 Min Read
Base64

Base64 schützt Binärdaten vor Beschädigungen bei reinen ASCII-Übertragungen

Bei der Base64-Kodierung werden Binärdaten in ein ASCII-Zeichenfolgenformat umgewandelt, indem die Binärdaten in eine 6-Bit-Zeichendarstellung umgewandelt werden. Die Base64-Kodierungsmethode wird verwendet, wenn Binärdaten wie Bilder oder Videos über Systeme übertragen werden, die für die Übertragung von Daten im Klartextformat (ASCII) ausgelegt sind.

Warum wird Base64-Kodierung verwendet?

Die Base64-Kodierung ist aufgrund der Probleme erforderlich, die bei der Übertragung von Medien im Rohbinärformat an textbasierte Systeme auftreten.

Da textbasierte Systeme (wie E-Mail ) Binärdaten als eine große Bandbreite an Zeichen interpretieren, darunter auch spezielle Befehlszeichen, werden viele der auf Übertragungsmedien übertragenen Binärdaten von diesen Systemen falsch interpretiert und gehen während des Übertragungsvorgangs verloren oder werden beschädigt.

Eine Methode, diese Art von Binärdaten so zu kodieren, dass derartige Übertragungsprobleme vermieden werden, besteht darin, sie als einfachen ASCII-Text im Base64-kodierten Format zu senden. Dies ist eine der Techniken, die der MIME-Standard verwendet, um andere Daten als einfachen Text zu senden.

Viele Programmiersprachen wie PHP und Javascript enthalten Base64-Kodierungs- und Dekodierungsfunktionen, um mit Base64-Kodierung übertragene Daten zu interpretieren.

Base64-Kodierungslogik

Die Base64-Kodierung zerlegt Binärdaten in 6-Bit-Segmente von jeweils 3 vollen Bytes und stellt diese als druckbare Zeichen im ASCII-Standard dar. Dies geschieht im Wesentlichen in zwei Schritten.

Der erste Schritt besteht darin, die Binärzeichenfolge in 6-Bit-Blöcke aufzuteilen. Base64 verwendet nur 6 Bit (entspricht 2^6 = 64 Zeichen), um sicherzustellen, dass die codierten Daten druckbar und für Menschen lesbar sind. Es werden keine der in ASCII verfügbaren Sonderzeichen verwendet.

Die 64 Zeichen (daher der Name Base64) bestehen aus 10 Ziffern, 26 Kleinbuchstaben, 26 Großbuchstaben sowie dem Pluszeichen (+) und dem Schrägstrich (/). Außerdem gibt es ein 65. Zeichen, das als Pad bezeichnet wird und das Gleichheitszeichen (=) darstellt. Dieses Zeichen wird verwendet, wenn das letzte Segment der Binärdaten nicht die vollen 6 Bit enthält.

Beispiel für Base64-Kodierung

Nehmen wir beispielsweise die drei ASCII-Zahlen 155, 162 und 233. Diese drei Zahlen bilden einen Binärstrom von 100110111010001011101001. Eine Binärdatei enthält, wie ein Bild, einen Binärstrom mit Zehn- oder Hunderttausenden von Nullen und Einsen.

Ein Base64-Encoder beginnt mit der Aufteilung des Binärstroms in Gruppen von jeweils sechs Zeichen: 100110 111010 001011 101001. Jede dieser Gruppen ergibt die Zahlen 38, 58, 11 und 41.

Ein binärer Datenstrom mit sechs Zeichen konvertiert binäre (oder Basis 2) in dezimale (Basis 10) Zeichen, indem jeder Wert, der in der binären Sequenz durch eine 1 dargestellt wird, mit seinem Positionsquadrat quadriert wird. Von rechts nach links und mit Null beginnend stellen die Werte im binären Datenstrom 2^0, dann 2^1, dann 2^2, dann 2^3, dann 2^4 und dann 2^5 dar.

Hier ist eine andere Möglichkeit, es zu betrachten. Von links beginnend ist jede Position 1, 2, 4, 8, 16 und 32 wert. Wenn die Binärzahl eine 1 im Slot hat, addieren Sie diesen Wert; wenn sie eine 0 im Slot hat, tun Sie das nicht. Die Binärzeichenfolge 100110 wird in die Dezimalzahl 38 umgewandelt: 0*2^01 + 1*2^1 + 1*2^2 + 0*2^3 + 0*2^4 + 1*2^5 = 0+2+4+0+0+32.

Die Base64-Kodierung nimmt diese Binärzeichenfolge und zerlegt sie in die 6-Bit-Werte 38, 58, 11 und 41.

Abschließend werden diese Zahlen mithilfe der Base64-Kodierungstabelle in ASCII-Zeichen umgewandelt. Die 6-Bit-Werte dieses Beispiels ergeben die ASCII-Sequenz m6Lp .

Verwenden der Base64-Konvertierungstabelle:

  • 38 ist m
  • 58 ist 6
  • 11 ist L
  • 41 ist p

Dieser zweistufige Prozess wird auf die gesamte codierte Binärzeichenfolge angewendet.

Um sicherzustellen, dass die codierten Daten richtig gedruckt werden können und die Zeilenlängenbeschränkung eines Mailservers nicht überschreiten, werden Zeilenumbruchzeichen eingefügt, um die Zeilenlänge unter 76 Zeichen zu halten. Die Zeilenumbruchzeichen werden wie alle anderen Daten codiert.

Der gesamte Zweck der Base64-Kodierung – vom Hinzufügen von Auffüllungen zum Beibehalten von 3-Byte-Binärsegmenten bis zur Konvertierung von Binärdaten in Text mithilfe der Base64-Tabelle – besteht darin, die Integrität der übertragenen Binärinformationen zu bewahren.

Base64-Kodierungstabelle

Die folgende Tabelle übersetzt alle 64 Zeichen, die in der Base64-Kodierung verwendet werden.

Base64-Kodierungstabelle
WertVerkohlen WertVerkohlen WertVerkohlen WertVerkohlen
0A 16Q 32G 48m
1B 17R 33H 49X
2C 18S 34ich 50j
3D 19T 35J 51z
4E 20U 36k 520
5F 21V 37m 531
6G 22B 38M 542
7H 23X 39N 553
8ICH 24Y 40Ö 564
9J 25Z 41P 575
10K 26A 42Q 586
11M 27B 43R 597
12M 28C 44S 608
13N 29D 45T 619
14Ö 30t 46Sie 62+
15P 31F 47gegen 63/

Das Endspiel lösen

Am Ende des Kodierungsprozesses kann ein Problem auftreten. Wenn die Größe der Originaldaten in Bytes ein Vielfaches von drei ist, funktioniert alles einwandfrei. Ist dies nicht der Fall, können leere Bytes vorhanden sein. Für eine ordnungsgemäße Kodierung werden genau 3 Bytes Binärdaten benötigt.

Die Lösung besteht darin, genügend Bytes mit dem Wert 0 anzuhängen, um eine 3-Byte-Gruppe zu erstellen. Zwei solcher Werte werden angehängt, wenn die Daten ein zusätzliches Datenbyte benötigen, einer wird angehängt, wenn zwei zusätzliche Bytes benötigt werden.

Natürlich können diese künstlichen nachfolgenden Nullen nicht mit der untenstehenden Kodierungstabelle kodiert werden. Sie müssen durch ein 65. Zeichen dargestellt werden. Das Base64-Füllzeichen ist das Gleichheitszeichen (=) und wird am Ende der kodierten Daten platziert.