Kako Base64 Encoding radi

Ako je internet informacijski autoput, onda je put za e-poštu uža oluja. Samo vrlo mali vozovi mogu proći.

Transportni sistem e-pošte je dizajniran samo za običan ASCII tekst. Pokušaj slanja teksta na drugim jezicima ili proizvoljnih datoteka je kao što je kupiti kamion kroz klizavu.

Kako veliki kamion ide kroz ravnicu?

Onda kako šaljete veliki kamion kroz malu klupu? Morate ga odneti na delove na jednom kraju, transportujte komade kroz klizavu i ponovo napraviti kamion od komada na drugom kraju.

Isto se događa kada pošaljete prilog u datoteku putem e-pošte . U procesu poznat kao kodiranje binarnih podataka transformisan je u ASCII tekst, koji se može bez problema preneti u e-poštu. Na kraju primaoca, podaci se dekodiraju i originalna datoteka je ponovo izgrađena.

Jedan od načina kodiranja proizvoljnih podataka kao običan ASCII tekst je Base64. To je jedna od tehnika koje MIME standard koristi za slanje podataka koji nisu običan tekst .

Base64 u Rescue

Kodiranje Base64 podrazumeva tri bajta, od kojih svaka sadrži osam bita, i predstavlja ih kao četiri printable znaka u ASCII standardu. To čini u suštini dva koraka.

Prvi korak je pretvoriti tri bajta u četiri broja od šest bita. Svaki karakter u ASCII standardu sastoji se od sedam bitova. Base64 koristi samo 6 bita (odgovara 2 ^ 6 = 64 karaktera) kako bi se osiguralo da se kodirani podaci mogu ispisivati ​​i čovjek čitati. Nijedan od specijalnih znakova koji su dostupni u ASCII-u se ne koriste.

64 karaktera (dakle ime Base64) su 10 cifara, 26 slova male slova, 26 velika slova kao i '+' i '/'.

Ako su, na primer, tri bajta 155, 162 i 233, odgovarajući (i zastrašujući) bitni tok je 100110111010001011101001, što odgovara 6-bitnim vrijednostima 38, 58, 11 i 41.

Ovi brojevi se pretvaraju u ASCII znake u drugom koraku pomoću tabele kodiranja Base64. 6-bitne vrijednosti našeg primera pretvara se u ASCII sekvencu "m6Lp".

Ovaj dvostepeni proces se primjenjuje na cijeli niz bajtova koji su kodirani. Da bi se obezbedilo da se kodirani podaci mogu ispravno odštampati i da ne prelaze granice dužine linije poštanskog servera, ubacuju se nove linijske znakove kako bi se održale dužine linije ispod 76 znakova. Novi linijski znakovi su kodirani kao svi ostali podaci.

Rešavanje Endgamea

Na kraju procesa kodiranja, možda ćemo doći do problema. Ako je veličina prvobitnih podataka u bajtovima višestruka od tri, sve ide dobro. Ako nije, možemo završiti sa jednim ili dva 8-bitna bajta. Za pravilno kodiranje, međutim trebaju tačno tri bajta.

Rešenje je dodati dovoljno bajtova sa vrijednošću '0' za kreiranje 3-bajtne grupe. Dve takve vrednosti su dodate ako imamo jedan dodatni bajt podataka, jedan je dodan za dva dodatna bajta.

Naravno, ovi vještački dodaci '0' ne mogu biti kodirani koristeći tabelu kodiranja ispod. Oni moraju biti predstavljeni sa 65-im znakom.

Osnovni karakter za Base64 je '='. Naravno, on se može pojaviti samo na kraju kodiranih podataka.

Base64 Encoding Tabela

Vrednost Char Vrednost Char Vrednost Char Vrednost 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 Ja 24 Y 40 o 56 4
9 J 25 Z 41 str 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 /