Base64-koodaus on prosessi, jossa binääridata muunnetaan ASCII-merkkijonomuotoon muuntamalla binaaridata 6-bittiseksi merkkiesitykseen. Base64-koodausmenetelmää käytetään, kun binaaridataa, kuten kuvia tai videoita, lähetetään järjestelmien kautta, jotka on suunniteltu lähettämään tietoja vain tekstimuodossa (ASCII).
Miksi Base64-koodausta käytetään?
Base64-koodauksen tarve johtuu ongelmista, joita syntyy, kun mediaa lähetetään tekstipohjaisiin järjestelmiin raakabinaarimuodossa. Koska tekstipohjaiset järjestelmät (kuten sähköposti) tulkitsevat binääridataa useiksi eri merkeiksi, mukaan lukien erikoiskomentomerkit, suuren osan siirtovälineelle lähetetyistä binääritiedoista nämä järjestelmät tulkitsevat väärin ja ne katoavat tai vahingoittuvat siirtoprosessin aikana.
Base64-koodauslogiikka
Base64-koodaus jakaa binääritiedot 6-bittisiksi 3 täyden tavun segmenteiksi ja esittää ne tulostettavina merkeinä ASCII-standardissa. Se tekee sen käytännössä kahdessa vaiheessa. Ensimmäinen askel on jakaa binäärimerkkijono 6-bittisiksi lohkoiksi. Base64 käyttää vain 6 bittiä (vastaa 2^6 = 64 merkkiä) varmistaakseen, että koodattu data on tulostettavissa ja luettavissa. Mitään ASCII:n erikoismerkkejä ei käytetä. 64 merkkiä (siis nimi Base64) ovat 10 numeroa, 26 pientä kirjainta, 26 isoa kirjainta sekä plusmerkki (+) ja vinoviiva (/). Siellä on myös 65. hahmo, joka tunnetaan nimellä a polku, joka on yhtäläisyysmerkki (=). Tätä merkkiä käytetään, kun binääridatan viimeinen segmentti ei sisällä kaikkia 6 bittiä.
Esimerkki Base64-koodauksesta
Tarkastellaan esimerkiksi kolmea ASCII-numeroa 155, 162 ja 233. Nämä kolme numeroa muodostavat binäärivirran 100110111010001011101001. Binääritiedosto, kuten kuva, sisältää binäärivirran, joka kestää kymmeniä tai satoja nollia ja tuhansia. . Base64-kooderi aloittaa jakamalla binaarivirran kuuden merkin ryhmiin: 100110 111010 001011 101001. Jokainen näistä ryhmistä muuttuu luvuiksi 38, 58, 11 ja 41. Kuuden merkin binäärivirta muuntaa tai perusbinäärivirran 2) desimaalimerkkeihin (kanta-10) neliöimällä mikä tahansa arvo, jota edustaa 1 binäärisekvenssissä, sen sijaintineliön kanssa. Alkaen oikealta ja siirryttäessä vasemmalle ja alkaen nollasta, binäärivirran arvot edustavat 2^0, sitten 2^1, sitten 2^2, sitten 2^3, sitten 2^4 ja sitten 2^5. Tässä on toinen tapa tarkastella sitä. Vasemmalta jokaisen paikan arvo on 1, 2, 4, 8, 16 ja 32. Jos binääriluvussa on 1, lisää tämä arvo; jos korttipaikassa on 0, et. Binäärimerkkijono 100110 muuntaa desimaaliluvun 38: 0*2^01 + 1*2^1 + 1*2^2 + 0*2^3 + 0*2^4 + 1*2^5 = 0+2 +4+0+0+32. Base64-koodaus ottaa tämän binäärimerkkijonon ja jakaa sen 6-bittisiksi arvoiksi 38, 58, 11 ja 41. Lopuksi nämä luvut muunnetaan ASCII-merkeiksi Base64-koodaustaulukon avulla. Tämän esimerkin 6-bittiset arvot muunnetaan ASCII-merkkijonoksi m6Lp† Base64-muunnostaulukon käyttäminen:
- 38 on m
- 58 on 6
- 11 on L
- 41 on s
Tätä kaksivaiheista prosessia sovelletaan koko binäärimerkkijonoon, joka on koodattu. Sen varmistamiseksi, että koodatut tiedot voidaan tulostaa oikein ja että ne eivät ylitä postipalvelimen rivin pituusrajoitusta, lisätään uusia rivimerkkejä, jotta rivin pituus pysyy alle 76 merkin. Rivinvaihtomerkit on koodattu kuten kaikki muutkin tiedot. Base64-koodauksen koko tarkoitus, täytön lisäämisestä 3-tavuisten binäärisegmenttien säilyttämiseksi binaarista tekstiksi muuntamiseen Base64-taulukon avulla, on säilyttää lähetetyn binääriinformaation eheys.
Base64-koodaustaulukko
Seuraava taulukko kääntää kaikki Base64-koodauksessa käytetyt 64 merkkiä.
Base64-koodaustaulukko | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Missä | Hiiltyä | Missä | Hiiltyä | Missä | Hiiltyä | Missä | Hiiltyä | |||
0 | A | 16 | K | 32 | G | 48 | kenen kanssa | |||
1 | B | 17 | R | 33 | huh | 49 | X | |||
2 | C | 18 | s | 34 | l | 50 | Joo | |||
3 | d | 19 | t | 35 | J | 51 | z | |||
4 | E | 20 | sinä | 36 | k | 52 | 0 | |||
5 | f | 21 | V | 37 | minä | 53 | 1 | |||
6 | G | 22 | W | 38 | m | 54 | 2 | |||
7 | huh | 23 | X | 39 | N | 55 | 3 | |||
8 | l | 24 | Joo | 40 | O | 56 | 4 | |||
9 | J | 25 | z | 41 | p | 57 | 5 | |||
10 | k | 26 | a | 42 | K | 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 | sinä | 62 | † | |||
15 | p | 31 | f | 47 | v | 63 | † |
Ratkaise loppupeli
Salausprosessin lopussa saattaa ilmetä ongelma. Jos alkuperäisen tiedon koko tavuina on kolmen kerrannainen, kaikki toimii hyvin. Jos ei, voi olla tyhjiä tavuja. Oikea koodaus vaatii täsmälleen 3 tavua binaaridataa. Ratkaisu on lisätä tarpeeksi tavuja arvolla 0 3 tavun ryhmän luomiseksi. Kaksi tällaista arvoa lisätään, jos data tarvitsee yhden ylimääräisen datatavun, yksi lisätään kahdelle ylimääräiselle tavulle. Näitä keinotekoisia perässä olevia nollia ei tietenkään voida koodata käyttämällä alla olevaa koodaustaulukkoa. Ne on esitettävä 65. merkillä. Base64-täytemerkki on yhtäsuuruusmerkki (=) ja se sijoitetaan koodatun tiedon loppuun.