Base64 kodiranje je proces pretvaranja binarnih podataka u ASCII format stringa pretvaranjem tih binarnih podataka u 6-bitni prikaz znakova. Base64 metoda kodiranja se koristi kada se binarni podaci, kao što su slike ili video, prenose preko sistema koji su dizajnirani da prenose podatke u formatu običnog teksta (ASCII).
Zašto se koristi Base64 kodiranje?
Potreba za Base64 kodiranjem proizilazi iz problema koji se javljaju kada se mediji prenose u sirovom binarnom formatu na sisteme zasnovane na tekstu.
Budući da sistemi zasnovani na tekstu (kao što je e-pošta) tumače binarne podatke kao širok spektar znakova, uključujući posebne komandne znakove, veliki deo binarnih podataka koji se prenose na prenosni medij se pogrešno tumači od strane tih sistema i gubi ili je oštećen u proces prijenosa.
Jedan od načina kodiranja ove vrste binarnih podataka na način koji izbjegava takve probleme u prijenosu je slanje kao običan ASCII tekst u Base64 kodiranom formatu. Ovo je jedna od tehnika koje koristi MIME standard za slanje podataka osim običnog teksta.
Mnogi programski jezici, kao što su PHP i Javascript, uključuju Base64 funkcije kodiranja i dekodiranja kako bi interpretirali podatke koji se prenose korištenjem Base64 kodiranja.
Base64 Encoding Logic
Base64 kodiranje razbija binarne podatke u 6-bitne segmente od 3 puna bajta i predstavlja ih kao znakove za štampanje u ASCII standardu. To radi u suštini u dva koraka.
Prvi korak je razbijanje binarnog niza na 6-bitne blokove. Base64 koristi samo 6 bita (što odgovara 2^6=64 karaktera) kako bi osigurao da se kodirani podaci mogu ispisati i čitati ljudima. Ne koristi se nijedan od specijalnih znakova dostupnih u ASCII-u.
64 znaka (otuda naziv Base64) su 10 cifara, 26 malih slova, 26 velikih znakova, kao i znak plus (+) i kosa crta (/). Postoji i 65. znak poznat kao pad, a to je znak jednakosti (=). Ovaj znak se koristi kada zadnji segment binarnih podataka ne sadrži punih 6 bitova.
Primjer kodiranja Base64
Na primjer, uzmite tri ASCII broja 155, 162 i 233. Ova tri broja čine binarni tok od 100110111010001011101001. Binarni fajl, poput slike, sadrži binarni tok koji se izvodi desetinama ili z stotinama hiljada i one.
A Base64 koder počinje cijepanjem binarnog toka u grupe od šest znakova: 100110 111010 001011 101001. Svaka od ovih grupa se prevodi u brojeve 38, 58, 11 i41.
Binarni tok od šest znakova pretvara između binarnih (ili baze-2) u decimalne (osnovne-10) znakove tako što svaku vrijednost predstavljenu 1 u binarnom nizu kvadrira sa svojim pozicionim kvadratom. Počevši s desna i krećući se lijevo, a počevši od nule, vrijednosti u binarnom toku predstavljaju 2^0, zatim 2^1, zatim 2^2, zatim 2^3, zatim 2^4, zatim 2^5.
Evo još jednog načina da to pogledate. Počevši od leve strane, svaka pozicija vredi 1, 2, 4, 8, 16 i 32. Ako binarni broj ima 1 u utoru, dodajete tu vrednost; ako ima 0 u slotu, nemate. Binarni niz 100110 pretvara se u decimalni broj 38: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^5=0+2 +4+0+0+32.
Base64 kodiranje uzima ovaj binarni niz i rastavlja ga na 6-bitne vrijednosti 38, 58, 11 i 41.
Konačno, ovi brojevi se konvertuju u ASCII znakove koristeći Base64 tablicu kodiranja. 6-bitne vrijednosti ovog primjera prevode se u ASCII sekvencu m6Lp.
Korišćenje tabele konverzije Base64:
- 38 je m
- 58 je 6
- 11 je L
- 41 je p
Ovaj proces u dva koraka se primjenjuje na cijeli binarni niz koji je kodiran.
Da bi se osiguralo da kodirani podaci mogu biti ispravno odštampani i da ne prelaze ograničenje dužine reda bilo kog mail servera, umetnuti su znakovi za novi red kako bi dužina reda bila ispod 76 znakova. Znakovi novog reda su kodirani kao i svi ostali podaci.
Cela svrha Base64 kodiranja, od dodavanja dopuna za očuvanje binarnih segmenata od 3 bajta do pretvaranja binarnog u tekst pomoću Base64 tabele, je očuvanje integriteta prenetih binarnih informacija.
Tabela kodiranja Base64
Sljedeća tabela prevodi svih 64 znaka korištenih u Base64 kodiranju.
Tabela kodiranja Base64 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Vrijednost | Char | Vrijednost | Char | Vrijednost | Char | Vrijednost | 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 | ja | 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 | / |
Rješavanje završnice
Na kraju procesa kodiranja može doći do problema. Ako je veličina originalnih podataka u bajtovima višestruka od tri, sve radi u redu. Ako nije, možda ima praznih bajtova. Za pravilno kodiranje potrebno je tačno 3 bajta binarnih podataka.
Rešenje je da se doda dovoljno bajtova sa vrednošću 0 za kreiranje grupe od 3 bajta. Dvije takve vrijednosti se dodaju ako je podacima potreban jedan dodatni bajt podataka, jedna se dodaje za dva dodatna bajta.
Naravno, ove umjetne '0' na kraju ne mogu se kodirati korištenjem donje tablice kodiranja. Moraju biti predstavljeni 65. znakom. Base64 dopunski znak je znak jednakosti (=) i nalazi se na kraju kodiranih podataka.