Skip to main content

Kako kodiranje Base64 deluje

Anonim

Če je internet informacijska avtocesta, potem je pot za e-pošto ozka grapa. Lahko se zgodi le zelo majhen voziček.

Transportni sistem e-pošte je zasnovan samo za navadno besedilo ASCII. Poskus pošiljanja besedila v druge jezike ali poljubnih datotek je kot na primer tovornjaka po grebenu.

Kako velik tovornjak gre skozi reko?

Potem, kako pošljete velik tovornjak skozi majhno grebenico? Na enem koncu ga morate odpeljati na koščke, prevažati koščke skozi grap, in ponovno sestaviti tovornjak iz kosov na drugem koncu.

Enako se zgodi, ko pošljete prilogo datoteke prek e-pošte. V procesu, ki se imenuje kodiranje binarnih podatkov, se preoblikuje v besedilo ASCII, ki ga je mogoče brez težav prenesti v e-pošto. Na prejemnikovem koncu se podatki dekodirajo in izvorna datoteka je obnovljena.

Ena metoda kodiranja poljubnih podatkov kot navadnega besedila ASCII je Base64. To je ena izmed tehnik, ki jih MIME standard uporablja za pošiljanje podatkov, ki niso navaden.

Base64 v Rescue

Kodiranje Base64 traja tri bajte, od katerih vsaka vsebuje osem bitov in jih predstavlja kot štiri znake za tiskanje v ASCII standardu. To počne v bistvu v dveh korakih.

Prvi korak je pretvorba treh bajtov v štiri številke šestih bitov. Vsak znak v ASCII standardu je sestavljen iz sedmih bitov. Base64 uporablja samo 6 bitov (kar ustreza 2 ^ 6 = 64 znaki), da se zagotovi kodirni podatki, ki jih je mogoče tiskati in jih je mogoče beriti. Noben od posebnih znakov, ki so na voljo v ASCII, se ne uporabljajo.

64 znakov (torej ime Base64) sta 10 števk, 26 malih črk, 26 velikih črk, pa tudi '+' in '/'.

Če so na primer trije bajti 155, 162 in 233, je ustrezni (in zastrašujoči) bitni tok 100110111010001011101001, kar pa ustreza 6-bitnim vrednostim 38, 58, 11 in 41.

Te številke se pretvorijo v znake ASCII v drugem koraku s tabelo kodiranja Base64. 6-bitne vrednosti našega primera prevedejo v ASCII zaporedje "m6Lp".

  • 155 -> 10011011
  • 162 -> 10100010
  • 233 -> 11101001
  • 100110 -> 38
  • 111010 -> 58
  • 001011 -> 11
  • 101001 -> 41
  • 38 -> m
  • 58 -> 6
  • 11 -> L
  • 41 -> str

Ta dvostopenjski postopek se uporablja za celotno zaporedje kodiranih kodov. Če želite zagotoviti, da so kodirani podatki pravilno natisnjeni in da ne presegajo omejitve dolžine linij poštnega strežnika, se vnesejo nove črke, da se dolžina črt pod 76 znaki. Znaki nove črte so kodirani kot vsi drugi podatki.

Reševanje končnega imena

Na koncu postopka kodiranja lahko naletimo na težavo. Če je velikost originalnih podatkov v bajtih trikrat več, je vse v redu. Če ni, bomo morda končali z enim ali dvema 8-bitnima bajtoma. Vendar za pravilno kodiranje potrebujemo natančno tri bajte.

Rešitev je, da dodate dovolj bajtov z vrednostjo '0', da ustvarite 3-bajtno skupino. Dve taki vrednosti dodamo, če imamo en dodaten bajt podatkov, ena je dodana za dva dodatna bajta.

Seveda teh umetnih sledov "0" ne moremo kodirati z uporabo tabele kodiranja spodaj. Morajo jih predstavljati 65. znak.

Znak za oblazinjenje Base64 je '='. Seveda se lahko na koncu kodiranih podatkov le kdaj pojavijo.

Base64 Encoding Tabela

VrednostChar VrednostChar VrednostChar VrednostChar
0A 16Q 32g 48w
1B 17R 33h 49x
2C 18S 34jaz 50y
3D 19T 35j 51z
4E 20U 36k 520
5F 21V 37l 531
6G 22W 38m 542
7H 23X 39n 553
8jaz 24Y 40o 564
9J 25Z 41str 575
10K 26a 42q 586
11L 27b 43r 597
12M 28c 44s 608
13N 29d 45t 619
14O 30e 46u 62+
15P 31f 47v 63/