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 | ||||||||||
Wert | Verkohlen | Wert | Verkohlen | Wert | Verkohlen | Wert | Verkohlen | |||
0 | A | 16 | Q | 32 | G | 48 | m | |||
1 | B | 17 | R | 33 | H | 49 | X | |||
2 | C | 18 | S | 34 | ich | 50 | j | |||
3 | D | 19 | T | 35 | J | 51 | z | |||
4 | E | 20 | U | 36 | k | 52 | 0 | |||
5 | F | 21 | V | 37 | m | 53 | 1 | |||
6 | G | 22 | B | 38 | M | 54 | 2 | |||
7 | H | 23 | X | 39 | N | 55 | 3 | |||
8 | ICH | 24 | Y | 40 | Ö | 56 | 4 | |||
9 | J | 25 | Z | 41 | P | 57 | 5 | |||
10 | K | 26 | A | 42 | Q | 58 | 6 | |||
11 | M | 27 | B | 43 | R | 59 | 7 | |||
12 | M | 28 | C | 44 | S | 60 | 8 | |||
13 | N | 29 | D | 45 | T | 61 | 9 | |||
14 | Ö | 30 | t | 46 | Sie | 62 | + | |||
15 | P | 31 | F | 47 | gegen | 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.