Hoe Base64-kodering werk

As die internet die inligting snelweg is, dan is die pad vir e-pos 'n smal kloof. Slegs baie klein karre kan verbygaan.

Die vervoersisteem van e-pos is slegs ontwerp vir gewone ASCII-teks. Probeer om teks in ander tale of arbitrêre lêers te stuur, is soos om 'n vragmotor deur die ravyn te kry.

Hoe gaan die Big Truck deur die Ravine?

Hoe stuur jy dan 'n groot vragmotor deur 'n klein kloof? Jy moet dit aan die een kant in stukke neem, die stukke deur die ravyn vervoer, en die vragmotor van die stukke aan die ander kant herbou.

Dieselfde gebeur wanneer u 'n lêer aanhangsel per e-pos stuur . In 'n proses wat as kodering bekend staan, word die binêre data omskep na ASCII-teks, wat sonder probleme in e-pos vervoer kan word. Op die ontvanger se einde word die data afgekodeer en die oorspronklike lêer herbou.

Een metode vir die kodering van arbitrêre data as gewone ASCII-teks is Base64. Dit is een van die tegnieke wat deur die MIME-standaard gebruik word om ander data as gewone teks te stuur .

Base64 tot die redding

Base64-kodering bevat drie grepe, elk bestaande uit agt bisse, en verteenwoordig dit as vier drukbare karakters in die ASCII-standaard. Dit doen dit in hoofsaaklik twee stappe.

Die eerste stap is om drie grepe om te skakel na vier getalle van ses bisse. Elke karakter in die ASCII-standaard bestaan ​​uit sewe stukke. Base64 gebruik slegs 6 bisse (ooreenstem met 2 ^ 6 = 64 karakters) om te verseker dat gekodeerde data uitdrukbaar en menslik leesbaar is. Geen van die spesiale karakters wat in ASCII beskikbaar is, word gebruik nie.

Die 64 karakters (dus die naam Base64) is 10 syfers, 26 klein letters, 26 hoofletters sowel as '+' en '/'.

As die drie grepe byvoorbeeld 155, 162 en 233 is, is die ooreenstemmende (en skrikwekkende) bitstroom 100110111010001011101001, wat op sy beurt ooreenstem met die 6-bis waardes 38, 58, 11 en 41.

Hierdie syfers word omgeskakel na ASCII karakters in die tweede stap met behulp van die Base64-koderingstabel. Die 6-bis waardes van ons voorbeeld vertaal na die ASCII-volgorde "m6Lp".

Hierdie twee-stap proses word toegepas op die hele reeks byte wat geënkodeer word. Om te verseker dat die gekodeerde data korrek gedruk kan word en nie die limiet van 'n limiet van 'n posbediener oorskry nie, word nuwe karakters ingevoeg om lynlengtes onder 76 karakters te hou. Die nuwe karakters word as enige ander data geïnkripteer.

Oplossing van die eindspel

Aan die einde van die kodering proses kan ons dalk 'n probleem oplos. As die grootte van die oorspronklike data in grepe 'n veelvoud van drie is, werk alles goed. As dit nie die geval is nie, kan ons met een of twee 8-bit grepe eindig. Vir behoorlike kodering benodig ons egter presies drie grepe.

Die oplossing is om genoeg grepe met 'n waarde van '0' by te voeg om 'n 3-byte-groep te skep. Twee sulke waardes is bygevoeg as ons een ekstra byte van data het, een is bygevoeg vir twee ekstra grepe.

Natuurlik kan hierdie kunsmatige '0's nie gekodeer word deur die onderstaande koderingstabel te gebruik nie. Hulle moet verteenwoordig word deur 'n 65ste karakter.

Die Base64-invulkarakter is '='. Natuurlik kan dit eers aan die einde van die gekodeerde data verskyn.

Base64-koderingstabel

waarde char waarde char waarde char waarde 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 Ek 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 'n 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 /