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).
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.
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 | |
---|---|---|---|---|---|---|---|---|
000xxx | A (00) | B (01) | C (02) | D (03) | E (04) | F (05) | G (06) | H (07) |
001xxx | I (08) | J (09) | K (0a) | L (0b) | M (0c) | N (0d) | O (0e) | P (0f) |
010xxx | Q (10) | R (11) | S (12) | T (13) | U (14) | V (15) | W (16) | X (17) |
011xxx | Y (18) | Z (19) | a (1a) | b (1b) | c (1c) | d (1d) | e (1e) | f (1f) |
100xxx | g (20) | h (21) | i (22) | j (23) | k (24) | l (25) | m (26) | n (27) |
101xxx | o (28) | p (29) | q (2a) | r (2b) | s (2c) | t (2d) | u (2e) | v (2f) |
110xxx | w (30) | x (31) | y (32) | z (33) | 0 (34) | 1 (35) | 2 (36) | 3 (37) |
111xxx | 4 (38) | 5 (39) | 6 (3a) | 7 (3b) | 8 (3c) | 9 (3d) | + (3e) | / (3f) |
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=".
Datum | Version | Datei | Beschreibung |
---|---|---|---|
2005-07-09 | 1.0 | libbase64-1.0.tar.gz | Quellcode |