Wéi Base64 Encoding Works

Wann de Internet d'Informatioun Autobunn ass, dann ass de Wee fir E-Mail eng schmuel Rutsch. Nëmme ganz klenge Karren kënne passen.

De Transportsystem vun der Email ass fir einfacher ASCII Text entwéckelt. Probéiert deen Text an anere Sproochen ze schécken oder arbiträr Dateien ass wéi e Camion duerch de Schlof ze kréien.

Wéi geet de groussen Truck duerch d'Schlof?

Da schreift Dir wéi Dir en grousse Camion duerch eng kleng Ravin schéckt? Dir musst et op d'Enn bréngen, d'Stéck duerch d'Schläif transportéieren an de Camion vun de Stécker op der anerer Säit opbauen.

Dat selwecht geschitt wann Dir e Dateieschoul iwwer E-Mail schécken . An engem Prozess dee bekannt as Kodéierung vun de binäre Donnéeën ass zum ASCII Text transforméiert ginn, wat ouni E-Mail ouni E-Mail transportéiert ka ginn. Am Enn vum Empfänger gëtt d'Donnéeën decodéiert an d'Originale Datei rebuilt.

Eng Method fir Kodéieren vun arbiträren Daten als einfacher ASCII Text ass Base64. Et ass eng vun den Techniken, déi vum MIME-Standard beschäftegt sinn fir aner Daten als Klausel ze schécken .

Base64 zu der Rettung

Base64-Kodéierung gëtt dräi Bytes, déi aus 8 Bits besteet, a vertrëtt hinnen als 4 ausdrécklech Zeechen am ASCII Standard. Et mécht dat an am Prinzip zwee Schrëtt.

Den éischte Schrëtt ass fir dräi Bytes op véier Zuelen vu sechs Bits ëmzebréngen. All Charakter an den ASCII Standard besteet aus siwen Bits. Base64 benotzt just 6 Bits (entspriechend 2 ^ 6 = 64 Zeechen), fir codéiert Donnéen ze garantéieren ass bedréckt a mënschlech liesen. Keen vun den speziellen Zeechen, déi am ASCII verfügbar sinn, ginn benotzt.

Déi 64 Zeechen (also den Numm Base64) sinn 10 Zifferen, 26 Kleinschäiner, 26 grousscase Charaktere wéi och '+' an '/'.

Wann zum Beispill d'dräi Bytes sinn 155, 162 an 233, ass de korrespondéierte (a erschrecken) Bitbit 100110111010001011101001, wat sech u sech mat 6-Bit-Wäerter 38, 58, 11 an 41 entsprécht.

Dës Zuelen sinn an der zweeter Schrëtt mat der Base64 Kodéier Tabelle konvertéiert an ASCII Zeechen. Déi 6-Bit-Wäerter vun eisem Beispill iwwersetzen d'ASCII-Sequenz "m6Lp".

Dëse Zwee-Schrëtt-Prozess gëtt fir déi ganz Sequenz vu Bytes applizéiert, déi encodéiert sinn. Fir sécherzestellen datt déi codéiert Donnéeën richteg ausgedréckt sinn an net méi wéi d'Linnlängt Limit vun de Servernemail benotzen, sinn Zeilenlinn ze setzen fir Linnlinnen ënnert 76 Zeechen ze halen. Déi Zeechen vun den Zeilen sinn encodéiert wéi all aner Daten.

Léisung vum Endgame

Am Ende vum Kodéierungsprozess hu mir eventuell e Problem ginn. Wann d'Gréisst vun den ursprénglechen Daten an Bytes e puer vun dräi ass, funktionnéiert d'Aarbecht gutt. Wann et net ass, kënne mir mat engem oder zwee 8-Bit Bytes ophalen. Fir korrekt kodéiert, brauche mer awer genau dräi Bytes.

D'Léisung ass genuch Bytes mat engem Wäert vun '0' ze addelen fir eng 3-Byte-Grupp ze kreéieren. Zwee sougenannte Wäerter gi behaapt, wa mir en extra Byte vu Daten hunn, gëtt een fir zwee Extra Bytes.

Natierlech kënnen dës kënschtlech nozeginn '0'net mat der codéierter Tabelle net codéiert ginn. Si mussen duerch e 65. Charakter repräsentéiert ginn.

De Base64 Padding Charakter ass '='. Natierlech kann et nëmmen am Ende vu codéierte Donnéen ersat ginn.

Base64 Kodéierungs Table

Wäert Char Wäert Char Wäert Char Wäert Char
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 Ech 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /