Jak pracuje kódování Base64

Pokud je internet informační dálnicí, pak cesta pro e-mail je úzká rokle. Pouze velmi malé vozíky mohou projít.

Dopravní systém e-mailu je určen pouze pro text ASCII. Snažíte se odesílat text v jiných jazycích nebo v libovolných souborech je jako získání kamionu přes údolí.

Jak se Big Truck pohybuje přes úžas?

Tak jak posíláte velký nákladní vůz do malé údolí? Musíte je rozdělit na kusy na jednom konci, přenést kusy do rokle a znovu sestavit kamion z kusů na druhém konci.

Totéž se stane, když odešlete přílohu souboru e-mailem . V procesu známém jako kódování binárních dat se přeměňuje na text ASCII, který lze bez problémů přenést do e-mailu. Na konci příjemce jsou data dekódována a původní soubor je znovu sestaven.

Jedna metoda kódování libovolných dat jako obyčejný text ASCII je Base64. Jedná se o jednu z metod používaných standardem MIME pro odesílání jiných než běžných textů .

Base64 na záchranu

Kódování Base64 trvá tři bajty, z nichž každý obsahuje osm bitů, a představuje je ve čtyřech tisknutelných znaky ve standardu ASCII. To dělá v podstatě ve dvou krocích.

Prvním krokem je převedení tří bajtů na čtyři čísla šesti bitů. Každá písmena v normě ASCII se skládá ze sedmi bitů. Base64 používá pouze 6 bitů (odpovídající 2 ^ 6 = 64 znaků), aby zajistil, že kódované údaje budou tisknutelné a lidsky čitelné. Žádný ze speciálních znaků dostupných v ASCII se nepoužívá.

64 znaků (odtud název Base64) je 10 číslic, 26 malých znaků, 26 velkých písmen, stejně jako "+" a "/".

Pokud jsou například tři bajty 155, 162 a 233, příslušný (a děsivý) bitový tok je 100110111010001011101001, což odpovídá 6bitovým hodnotám 38, 58, 11 a 41.

Tato čísla jsou ve druhém kroku převedena na znaky ASCII pomocí tabulky kódování Base64. 6bitové hodnoty našeho příkladu se překládají do ASCII sekvence "m6Lp".

Tento dvoukrokový proces je aplikován na celou posloupnost bajtů, které jsou kódovány. Chcete-li zajistit, aby kódovaná data mohla být řádně vytištěna a nepřesahovala limit délky řádku poštovního serveru, jsou vloženy znaky nové linky, aby se zachovaly délky čáry pod 76 znaků. Nové znaky jsou zakódovány jako všechny ostatní data.

Řešení Endgame

Na konci procesu kódování bychom mohli narazit na problém. Pokud je velikost původních dat v bajtech násobkem tří, vše funguje dobře. Pokud tomu tak není, mohli bychom skončit jedním nebo dvěma 8bitovými bajty. Pro správné kódování potřebujeme přesně tři bajty.

Řešením je připojit dostatek bajtů s hodnotou '0' pro vytvoření tříbajtové skupiny. Dvě takové hodnoty jsou připojeny, pokud máme jeden extra bajt dat, jeden je připojen pro dva další bajty.

Samozřejmě, tyto umělé koncové '0 nemohou být kódovány pomocí kódovací tabulky níže. Musí být zastoupeny 65. znakem.

Padací znak Base64 je '='. Přirozeně se to může objevit až na konci zakódovaných dat.

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 I 24 Y 40 Ó 56 4
9 J 25 Z 41 str 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 /