Miten Base64-koodaus toimii

Jos internet on tietoväylä, sähköpostireitti on kapea rotko. Vain hyvin pienet vaunut voivat kulkea.

Sähköpostin kuljetusjärjestelmä on suunniteltu vain tavalliseen ASCII-tekstiin. Yritetään lähettää tekstiä muille kielille tai mielivaltaisille tiedostoille kuin saada kuorma-auto läpi rotkon.

Kuinka Big Truck kulkee Ravinon läpi?

Mistä sitten lähetät suuren kuorma-auton pienen rotkon läpi? Sinun täytyy ottaa se palasiksi toisesta päästä, kuljettaa palat rotan läpi ja muodostaa trukki uudelleen toisesta päästä olevista paloista.

Sama tapahtuu, kun lähetät tiedostoliitteen sähköpostilla . Koodauksessa tunnetussa prosessissa binääridata muunnetaan ASCII-tekstiksi, joka voidaan kuljettaa sähköpostissa ilman ongelmia. Vastaanottajan lopussa tiedot dekoodataan ja alkuperäinen tiedosto rakennetaan uudelleen.

Yksi tapa koodata mielivaltaista dataa tavallisena ASCII-tekstinä on Base64. Se on yksi MIME-standardin käyttämästä tekniikasta lähettää muita tietoja kuin pelkkää tekstiä .

Base64 Rescueiin

Base64-koodaus vie kolme tavua, joista jokainen koostuu kahdeksasta bitistä ja edustaa niitä neljäksi tulostettavaksi merkiksi ASCII-standardissa. Se tekee sen olennaisilta osiltaan kahdessa vaiheessa.

Ensimmäinen vaihe on muuntaa kolme tavua neljään numeroon kuusi bittiä. Jokainen ASCII-standardin merkki koostuu seitsemästä bittiin. Base64 käyttää vain 6 bittiä (vastaa 2 ^ 6 = 64 merkkiä), jotta varmistetaan, että koodatut tiedot ovat tulostettavia ja inhimillisesti luettavissa. Mitään ASCII: ssa käytettävissä olevista erikoismerkeistä ei ole käytössä.

64 merkkiä (tästä syystä nimi Base64) on 10 numeroa, 26 pieniä kirjaimia, 26 isoa kirjainta sekä "+" ja "/".

Jos esimerkiksi kolme tavua ovat 155, 162 ja 233, vastaava (ja pelottava) bittivirta on 100110111010001011101001, joka puolestaan ​​vastaa 6-bittisiä arvoja 38, 58, 11 ja 41.

Nämä numerot muunnetaan ASCII-merkiksi toisessa vaiheessa käyttämällä Base64-koodaustaulukkoa. Esimerkin 6-bittiset arvot kääntävät ASCII-sekvenssiin "m6Lp".

Tämä kaksivaiheinen prosessi sovelletaan koko koodatun tavujen sarjaan. Jotta varmistetaan, että koodatut tiedot voidaan tulostaa oikein ja ne eivät ylitä postin palvelimen rivin pituusrajoitusta, rivinviivat lisätään pitämään rivin pituudet alle 76 merkkiä. Uusi rivin merkit koodataan kuten kaikki muut tiedot.

Loppusignaalin ratkaiseminen

Koodausprosessin lopussa voisimme törmätä ongelmaan. Jos alkuperäisen datan koko tavuissa on moninkertainen kolminkertainen, kaikki toimii hyvin. Jos näin ei ole, saatamme päätyä yhdellä tai kahdella 8-bittisellä tavulla. Oikea koodaus vaatii kuitenkin täsmälleen kolme tavua.

Ratkaisu on lisätä tarpeeksi tavuja, joiden arvo on "0", jotta luodaan 3 tavuinen ryhmä. Liitetään kaksi tällaista arvoa, jos meillä on yksi ylimääräinen tavu tavuista, yksi on lisätty kahteen ylimääräiseen tavuun.

Tietenkään näitä keinotekoisia jälkiä 0: ää ei voida koodata käyttäen alla olevaa koodaustaulukkoa. Heitä on edustettava 65-luvulla.

Base64-padding-merkki on '='. Tietenkin se voi näkyä vain koodattujen tietojen lopussa.

Base64-koodaustaulukko

Arvo Hiiltyä Arvo Hiiltyä Arvo Hiiltyä Arvo Hiiltyä
0 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 minä 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 minä 24 Y 40 O 56 4
9 J 25 Z 41 p 57 5
10 K 26 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 /