Skip to main content

Miten Base64-koodaus toimii

The Guardian Legend ※ Cracking Videogame Passwords S1e10 (Maaliskuu 2025)

The Guardian Legend ※ Cracking Videogame Passwords S1e10 (Maaliskuu 2025)
Anonim

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 tavalliselle ASCII-tekstille. 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".

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

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

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