Base64 kodiranje je proces pretvaranja binarnih podataka u ASCII format niza pretvaranjem tih binarnih podataka u 6-bitni prikaz znakova. Metoda kodiranja Base64 koristi se kada se binarni podaci, poput slika ili videa, prenose preko sustava koji su dizajnirani za prijenos podataka u formatu običnog teksta (ASCII).
Zašto se koristi kodiranje Base64?
Potreba za Base64 kodiranjem proizlazi iz problema koji se javljaju kada se mediji prenose u neobrađenom binarnom formatu sustavima temeljenim na tekstu.
Budući da sustavi koji se temelje na tekstu (kao što je e-pošta) tumače binarne podatke kao širok raspon znakova, uključujući posebne naredbene znakove, ti sustavi pogrešno tumače velik dio binarnih podataka koji se prenose medijima za prijenos i gube se ili oštećuju u proces prijenosa.
Jedna metoda kodiranja ove vrste binarnih podataka na način koji izbjegava takve probleme s prijenosom je slanje kao obični ASCII tekst u Base64 kodiranom formatu. Ovo je jedna od tehnika koje upotrebljava MIME standard za slanje podataka koji nisu običan tekst.
Mnogi programski jezici, kao što su PHP i Javascript, uključuju Base64 funkcije kodiranja i dekodiranja kako bi se interpretirali podaci koji se prenose pomoću Base64 kodiranja.
Logika kodiranja Base64
Base64 kodiranje razbija binarne podatke u 6-bitne segmente od 3 puna bajta i predstavlja ih kao ispisne znakove u ASCII standardu. To čini u dva koraka.
Prvi korak je rastavljanje binarnog niza na 6-bitne blokove. Base64 koristi samo 6 bitova (što odgovara 2^6=64 znaka) kako bi osigurao da se kodirani podaci mogu ispisati i čitljivi. Ne koristi se nijedan od posebnih znakova dostupnih u ASCII.
64 znaka (otuda naziv Base64) su 10 znamenki, 26 malih slova, 26 velikih slova kao i znak plus (+) i kosa crta (/). Postoji i 65. znak poznat kao blok, a to je znak jednakosti (=). Ovaj se znak koristi kada posljednji 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. Binarna datoteka, poput slike, sadrži binarni tok koji radi na desetke ili stotine tisuća nula i jedinice.
Koder Base64 počinje dijeljenjem binarnog toka u grupe od šest znakova: 100110 111010 001011 101001. Svaka od ovih grupa se prevodi u brojeve 38, 58, 11 i 41.
Binarni tok od šest znakova pretvara između binarnih (ili baze 2) u decimalne (baze 10) znakova kvadriranjem svake vrijednosti predstavljene s 1 u binarnom nizu s njezinim položajnim kvadratom. Počevši od desne pa lijevo i 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 drugog načina da to pogledate. Počevši slijeva, svaka pozicija vrijedi 1, 2, 4, 8, 16 i 32. Ako binarni broj ima 1 u utoru, dodajete tu vrijednost; ako ima 0 u utoru, 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.
Na kraju, ovi se brojevi pretvaraju u ASCII znakove pomoću Base64 tablice kodiranja. 6-bitne vrijednosti ovog primjera prevode se u ASCII niz m6Lp.
Korištenje tablice konverzije Base64:
- 38 je m
- 58 je 6
- 11 je L
- 41 je p
Ovaj postupak u dva koraka primjenjuje se na cijeli binarni niz koji je kodiran.
Kako bi se osiguralo da se kodirani podaci mogu pravilno ispisati i da ne prelaze ograničenje duljine reda bilo kojeg poslužitelja e-pošte, umetnuti su znakovi za novi red kako bi duljina reda bila ispod 76 znakova. Znakovi za novi red kodirani su kao i svi ostali podaci.
Cjelokupna svrha Base64 kodiranja, od dodavanja ispune radi očuvanja 3-bajtnih binarnih segmenata do pretvaranja binarnih u tekst pomoću Base64 tablice, je očuvanje integriteta prenesenih binarnih informacija.
Base64 tablica kodiranja
Sljedeća tablica prevodi sva 64 znaka korištena u Base64 kodiranju.
Base64 tablica kodiranja | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Vrijednost | Znak | Vrijednost | Znak | Vrijednost | Znak | Vrijednost | Znak | |||
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 | / |
Rješavanje završne igre
Na kraju procesa kodiranja može doći do problema. Ako je veličina izvornih podataka u bajtovima višekratnik tri, sve radi dobro. Ako nije, možda ima praznih bajtova. Za ispravno kodiranje potrebna su točno 3 bajta binarnih podataka.
Rješenje je dodati dovoljno bajtova s vrijednošću 0 da se stvori grupa od 3 bajta. Dvije takve vrijednosti se dodaju ako podaci trebaju jedan dodatni bajt podataka, jedna se dodaje za dva dodatna bajta.
Naravno, ove umjetne '0' na kraju ne mogu se kodirati pomoću donje tablice kodiranja. Moraju biti predstavljeni 65. znakom. Base64 znak za ispunu je znak jednakosti (=) i nalazi se na kraju kodiranih podataka.