Die Base64-Codierung

Hintergrund

Die Base64-Codierung dient der Darstellung binärer Daten als Text. Während in Binärdaten alle 256 in einem Byte darstellbaren Zeichen anzutreffen sind, dürfen in vielen Medien nur ein Teil dieser Zeichen vorkommen, beispielsweise nur druckbare Zeichen aus dem regulären (7-Bit) ASCII-Alphabet. Wenn eine Datei via E-Mail versendet werden soll, muss zum Beispiel häufig eine solche Codierung vorgenommen werden (wenn die Gegenstelle nicht ankündigt 8BITMIME-fähig zu sein).

Das Verfahren

Der Kerngedanke hinter der Base64-Codierung ist, jeweils 3 Byte (3 x 8 = 24 Bit) aus dem Eingabestrom in 4 Zeichen des Base64-Alphabets umzusetzen. Das Base64-Alphabet umfasst dabei genau 64 Zeichen, d.h. jedes Zeichen ist in der Lage 6 Bit Information darzustellen (womit die 24 Bit der Eingabe in 4 Zeichen der Ausgabe abbildbar sind). Diese Zeichen umfassen die Großbuchstaben A-Z, die Kleinbuchstaben a-z, die Ziffern 0 bis 9 sowie das Plus-Zeichen und den Schrägstrich. Für den Fall, dass die Eingabe kein Vielfaches von 3 Zeichen aufweist, und damit die Ausgabe kein Vielfaches von 4 Zeichen umfasst, gibt es das Padding-Zeichen '=', mit dem die Ausgabe wieder auf ein Vielfaches von 4 Zeichen aufgefüllt wird. Je nach Anzahl von Eingabezeichen bleiben entweder 8 Bit oder 16 Bit der Eingabe übrig, jedoch sind nur 6, 12, 18 und 24 Bit durch komplette Ausgabezeichen darstellbar. Damit die "angeknabberten" Zeichen richtig decodiert werden können, werden in der Eingabe fehlende Bits durch 0-Bits ersetzt. Die Anzahl der eingefügten Padding-Zeichen zeigt beim Decodieren an, ob in der Eingabe 8 (zwei Padding-Zeichen) oder 16 Bit (ein Padding-Zeichen) überzählig waren. Dadurch, dass 3 Byte in 4 Zeichen dargestellt werden, sind mit Base64 codierte Daten um ca. 33% größer als die Rohdaten.

Das Base64-Alphabet

Die folgende Tabelle gibt das Base64-Alphabet wieder. In den Klammern steht der jeweilige Zeichenwert in hexadezimaler Schreibweise. In den Spalten- bzw. Zeilenbeschriftungen ist die Darstellung in binärer Form, wobei die Spalte durch die unteren drei Bits und die Zeile durch die oberen drei Bits definiert wird. Das Zeichen für die Bitfolge 010101 ist demnach in Zeile 2 (010) und Spalte 5 (101) zu finden (wobei die Zählung jeweils mit 0 beginnt!), und ist ein großes V. Rückwärts betrachtet stellt ein kleines p den Zeichenwert 29h dar, welcher der Bitfolge 101001 entspricht.

xxx000 xxx001 xxx010 xxx011 xxx100 xxx101 xxx110 xxx111
000xxxA (00)B (01)C (02)D (03)E (04)F (05)G (06)H (07)
001xxxI (08)J (09)K (0a)L (0b)M (0c)N (0d)O (0e)P (0f)
010xxxQ (10)R (11)S (12)T (13)U (14)V (15)W (16)X (17)
011xxxY (18)Z (19)a (1a)b (1b)c (1c)d (1d)e (1e)f (1f)
100xxxg (20)h (21)i (22)j (23)k (24)l (25)m (26)n (27)
101xxxo (28)p (29)q (2a)r (2b)s (2c)t (2d)u (2e)v (2f)
110xxxw (30)x (31)y (32)z (33)0 (34)1 (35)2 (36)3 (37)
111xxx4 (38)5 (39)6 (3a)7 (3b)8 (3c)9 (3d)+ (3e)/ (3f)

Ein Beispiel

Die Zeichenkette "Hallo Welt!" soll in Base64 codiert werden. Im ersten Schritt benötigt man dazu eine ASCII-Tabelle um die zu den Zeichen gehörenden Binärwerte zu ermitteln:

H a l l o W e l t !
01001000 01100001 01101100 01101100 01101111 00100000 01010111 01100101 01101100 01110100 00100001

Als nächstes werden immer 6 Bits zu einer neuen Gruppe zusammengefasst und gemäß der oben stehenden Tabelle in Zeichen des Base64-Alphabets übersetzt:

010010 000110 000101 101100 011011 000110 111100 100000 010101 110110 010101 101100 011101 000010 000100 000000
S G F s b G 8 g V 2 V s d C E =

Beim letzten Zeichen stehen nur noch 4 Bits zur Verfügung (0001), daher wird der Rest mit 00 aufgefüllt. Außerdem sind es insgesamt nur 15 statt 16 Zeichen, d.h. es wird noch ein Füllzeichen angehägt. Somit ist die Base64-Zeichenkette "SGFsbG8gV2VsdCE=".

Downloads

Datum Version Datei Beschreibung
2005-07-09 1.0 libbase64-1.0.tar.gz Quellcode

Zurück zur Hauptseite