Base64-koodaus on prosessi, jossa binaaridata muunnetaan ASCII-merkkijonomuotoon muuntamalla binaaridata 6-bittiseksi merkkiesitykseen. Base64-koodausmenetelmää käytetään, kun binääridataa, kuten kuvia tai videota, siirretään järjestelmissä, jotka on suunniteltu lähettämään tietoja vain tekstimuodossa (ASCII).
Miksi Base64-koodausta käytetään?
Base64-koodauksen tarve johtuu ongelmista, joita esiintyy, kun mediaa siirretään raakabinaarimuodossa tekstipohjaisiin järjestelmiin.
Koska tekstipohjaiset järjestelmät (kuten sähköposti) tulkitsevat binääridataa useiksi eri merkeiksi, mukaan lukien erikoiskomentomerkit, suuren osan median siirtoon siirretystä binääritiedosta tulkitsevat nämä järjestelmät väärin ja ne katoavat tai vioittuvat lähetysprosessi.
Yksi tapa koodata tällainen binääritieto tavalla, joka välttää tällaiset lähetysongelmat, on lähettää se tavallisena ASCII-tekstina Base64-koodatussa muodossa. Tämä on yksi MIME-standardin käyttämistä tekniikoista muun tiedon kuin pelkkää tekstiä lähettämiseen.
Monet ohjelmointikielet, kuten PHP ja Javascript, sisältävät Base64-koodaus- ja dekoodaustoimintoja Base64-koodauksella lähetetyn tiedon tulkitsemiseksi.
Base64-koodauslogiikka
Base64-koodaus katkaisee 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 vaihe 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 ihmisen luettavissa. Mitään ASCII:n erikoismerkkejä ei käytetä.
64 merkkiä (josta nimi Base64) ovat 10 numeroa, 26 pientä merkkiä, 26 isoa merkkiä sekä plusmerkki (+) ja kenoviiva (/). On myös 65. merkki, joka tunnetaan nimellä pad, joka on yhtäläisyysmerkki (=). Tätä merkkiä käytetään, kun binääridatan viimeinen segmentti ei sisällä täyttä 6 bittiä.
Base64-koodausesimerkki
Otetaan esimerkiksi kolme ASCII-numeroa 155, 162 ja 233. Nämä kolme numeroa muodostavat binäärivirran 100110111010001011101001. Binääritiedosto, kuten kuva, sisältää binäärivirran, joka kulkee kymmeniä tai satoja tuhansia. ja niitä.
Base64-enkooderi alkaa jakaa binäärivirran kuuden merkin ryhmiin: 100110 111010 001011 101001. Jokainen näistä ryhmittelyistä tarkoittaa numeroita 38, 58, 11 ja 41..
Kuuden merkin binaarivirta muuntaa binäärimerkit (tai kanta-2) desimaalimerkkeihin (kanta-10) neliöimällä jokaisen binäärisekvenssin luvulla 1 edustaman arvon sen sijaintineliön kanssa. Alkaen oike alta 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ä. Vasemm alta alkaen jokaisen paikan arvo on 1, 2, 4, 8, 16 ja 32. Jos binääriluvussa on 1, lisäät sen arvon. jos siinä on 0, sinulla ei ole. Binäärimerkkijono 100110 muuntaa desimaaliluvuksi 38: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^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 käyttämällä Base64-koodaustaulukkoa. Tämän esimerkin 6-bittiset arvot ovat ASCII-sekvenssi m6Lp.
Base64-muunnostaulukon käyttäminen:
- 38 on m
- 58 on 6
- 11 on L
- 41 on p
Tätä kaksivaiheista prosessia sovelletaan koko binäärimerkkijonoon, joka on koodattu.
Jotta varmistetaan, että koodatut tiedot voidaan tulostaa oikein eivätkä ylitä minkään postipalvelimen rivin pituusrajoitusta, rivinvaihtomerkkejä lisätään, 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 binaarin muuntamiseen tekstiksi Base64-taulukon avulla, on säilyttää lähetetyn binääritietojen eheys.
Base64-koodaustaulukko
Seuraava taulukko kääntää kaikki Base64-koodauksessa käytetyt 64 merkkiä.
Base64-koodaustaulukko | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Arvo | Char | Arvo | Char | Arvo | Char | Arvo | 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 | 55 | 3 | ||||
8 | I | 24 | Y | 40 | o | 56 | 4 | |||
9 | J | 25 | Z | 41 | p | 57 | 5 | |||
10 | K | 26 | a | 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 | / |
Loppupelin ratkaiseminen
Koodausprosessin lopussa saattaa ilmetä ongelma. Jos alkuperäisen tiedon koko tavuina on kolmen kerrannainen, kaikki toimii hyvin. Jos se ei ole, siinä voi olla tyhjiä tavuja. Oikeaan koodaukseen tarvitaan täsmälleen 3 tavua binaaridataa.
Ratkaisu on liittää tarpeeksi tavuja arvolla 0 3-tavuisen 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.
Tietenkin näitä keinotekoisia '0'-merkkejä ei voida koodata alla olevan koodaustaulukon avulla. Ne on esitettävä 65. merkillä. Base64-täytemerkki on yhtälömerkki (=) ja se sijoitetaan koodatun tiedon loppuun.