Jak funguje kódování Base64
Kódování Base64 je proces převodu binárních dat do formátu řetězce ASCII převodem těchto binárních dat do 6bitové znakové reprezentace. Metoda kódování Base64 se používá, když jsou binární data, jako jsou obrázky nebo video, přenášena přes systémy, které jsou navrženy pro přenos dat ve formátu prostého textu (ASCII).
Proč se používá kódování Base64?
Potřeba kódování Base64 pochází z problémů, ke kterým dochází při přenosu médií raw binární formát do textových systémů.
Vzhledem k tomu, že textové systémy (např e-mailem) interpretovat binární data jako širokou škálu znaků, včetně speciálních příkazových znaků, většinu binárních dat který je přenášen na přenosová média, je těmito systémy nesprávně interpretován a při přenosu je ztracen nebo poškozen proces.

Jednou z metod kódování tohoto druhu binárních dat způsobem, který se vyhýbá takovým problémům s přenosem, je poslat je jako prostý text ASCII v kódovaném formátu Base64. Toto je jedna z technik používaných standardem MIME k odesílání jiných dat než prostého textu.
Mnoho programovacích jazyků, jako je PHP a Javascript, obsahuje funkce kódování a dekódování Base64, aby bylo možné interpretovat data přenášená pomocí kódování Base64.
Logika kódování Base64
Kódování Base64 rozděluje binární data na 6bitové segmenty po 3 celých bytech a reprezentuje je jako tisknutelné znaky ve standardu ASCII. Dělá to v podstatě ve dvou krocích.
Prvním krokem je rozdělení binárního řetězce na 6bitové bloky. Base64 používá pouze 6 bitů (odpovídající 2^6 = 64 znaků), aby bylo zajištěno, že zakódovaná data budou tisknutelná a čitelná lidmi. Nejsou použity žádné speciální znaky dostupné v ASCII.
Těchto 64 znaků (odtud název Base64) je 10 číslic, 26 malých písmen, 26 velkých písmen a také znaménko plus (+) a lomítko (/). Existuje také 65. postava známá jako a podložka, což je rovnítko (=). Tento znak se používá, když poslední segment binárních dat neobsahuje celých 6 bitů.
Příklad kódování Base64
Vezměte například tři čísla ASCII 155, 162 a 233. Tato tři čísla tvoří binární tok 100110111010001011101001. Binární soubor, stejně jako obrázek, obsahuje binární proud běžící pro desítky nebo stovky tisíc nul a jedniček.
Kodér Base64 začíná rozdělením binárního proudu do skupin po šesti znacích: 100110 111010 001011 101001. Každé z těchto seskupení se převádí na čísla 38, 58, 11 a 41.
Šestimístný binární tok převádí mezi binárními (neboli se základem-2) na desítkové (základ-10) znaky umocněním každé hodnoty reprezentované 1 v binární sekvenci s jejím pozičním čtvercem. Počínaje zprava a pohybem doleva a počínaje nulou představují hodnoty v binárním proudu 2^0, pak 2^1, potom 2^2, potom 2^3, potom 2^4 a potom 2^5.
Zde je další způsob, jak se na to podívat. Počínaje zleva má každá pozice hodnotu 1, 2, 4, 8, 16 a 32. Pokud má binární číslo ve slotu 1, přidáte tuto hodnotu; pokud má ve slotu 0, vy ne. Binární řetězec 100110 se převede na desítkové číslo 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.
Kódování Base64 vezme tento binární řetězec a rozloží ho na 6bitové hodnoty 38, 58, 11 a 41.
Nakonec jsou tato čísla převedena na znaky ASCII pomocí tabulky kódování Base64. 6bitové hodnoty tohoto příkladu se převádějí do sekvence ASCII m6Lp.
Použití převodní tabulky Base64:
- 38 je m
- 58 je 6
- 11 je L
- 41 je str
Tento dvoukrokový proces se aplikuje na celý binární řetězec, který je zakódován.
Aby bylo zajištěno, že zakódovaná data mohou být správně vytištěna a nepřekročí limit délky řádku žádného poštovního serveru, jsou vkládány znaky nového řádku, aby délka řádků nepřesáhla 76 znaků. Znaky nového řádku jsou kódovány jako všechna ostatní data.
Celý účel kódování Base64, od přidání odsazení pro zachování 3bajtových binárních segmentů až po převod binárního na text pomocí tabulky Base64 má zachovat integritu přenášeného binárního kódu informace.
Tabulka kódování Base64
Následující tabulka překládá všech 64 znaků používaných v kódování Base64.
Tabulka kódování Base64 | |||||||
---|---|---|---|---|---|---|---|
Hodnota | Char | Hodnota | Char | Hodnota | Char | Hodnota | 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 | PROTI | 37 | l | 53 | 1 |
6 | G | 22 | W | 38 | m | 54 | 2 |
7 | H | 23 | X | 39 | n | 55 | 3 |
8 | já | 24 | Y | 40 | Ó | 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 | Ó | 30 | E | 46 | u | 62 | + |
15 | P | 31 | F | 47 | proti | 63 | / |
Řešení Endgame
Na konci procesu kódování může nastat problém. Pokud je velikost původních dat v bajtech násobkem tří, vše funguje dobře. Pokud tomu tak není, mohou být prázdné bajty. Pro správné kódování jsou potřeba přesně 3 bajty binárních dat.
Řešením je připojit dostatek bajtů s hodnotou 0 k vytvoření 3bajtové skupiny. Dvě takové hodnoty se připojí, pokud data potřebují jeden bajt dat navíc, jedna se připojí za dva bajty navíc.
Tyto umělé koncové '0' samozřejmě nelze zakódovat pomocí níže uvedené kódovací tabulky. Musí být reprezentovány 65. znakem. Výplňový znak Base64 je znak rovná se (=) a je umístěn na konec kódovaných dat.