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í v nezpracovaném binárním formátu do textových systémů.
Vzhledem k tomu, že textové systémy (jako je e-mail) interpretují binární data jako širokou škálu znaků, včetně speciálních příkazových znaků, velká část binárních dat přenášených na přenosová média je těmito systémy chybně interpretována a ztracena nebo poškozena proces přenosu.
Jedním ze způsobů kódování tohoto druhu binárních dat způsobem, který zabraňuje 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ělit binární řetězec 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ěch 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. znak známý jako pad, což je znak rovná se (=). 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 si 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í tok běžící na desítky nebo stovky tisíc nul a jedničky.
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.
Šestiznakový binární tok převádí mezi binárními (nebo 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, pak 2^5.
Tady 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: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^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řekládají do sekvence ASCII m6Lp.
Použití převodní tabulky Base64:
- 38 je m
- 58 je 6
- 11 je L
- 41 je p
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 lze správně vytisknout a nepřekročí limit délky řádků žá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 zakódovány jako všechna ostatní data.
Celým účelem 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, je zachovat integritu přenášených binárních informací.
Base64 kódovací tabulka
Následující tabulka překládá všech 64 znaků použitých v kódování Base64.
Base64 kódovací tabulka | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Value | Char | Value | Char | Value | Char | Value | 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 | / |
Solving the 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.
Samozřejmě, že tyto umělé koncové '0' 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.