Hogyan működik a Base64 kódolás

Ha az internet az információs autópálya, akkor az e-mail útja keskeny szakadék. Csak nagyon kicsi kocsik szállhatnak.

Az e-mailek szállítási rendszerét kizárólag egyszerű ASCII szövegekhez tervezték. Ha más nyelveken vagy tetszőleges fájlokba akarsz küldeni szöveget, olyan, mintha teherautó lenne a szakadékon keresztül.

Hogyan jár a nagy teherautó a szurdokon?

Akkor hogyan küldsz egy nagy teherautót egy kis szakadékba? El kell vinned darabokra az egyik végét, szállítani a darabokat a szakadékon keresztül, és újjáépíteni a járművet a másik végén levő darabokból.

Ugyanez történik, amikor e-mailben elküld egy fájl mellékletet . A kódolásként ismert folyamat során a bináris adatok ASCII szövegekké alakulnak át, amely problémamentesen e-mailben szállítható. A címzett végén az adatokat dekódolják, és az eredeti fájlt átépítik.

Az önkényes adatok egyszerű ASCII szöveg kódolásának egyik módja a Base64. Ez a MIME szabvány egyik alkalmazott módja a nem egyszerű szöveges adatok küldésére.

Base64 a Rescuehez

Az Base64 kódolás három bájtot tartalmaz, melyek mindegyike nyolc bitből áll, és négy nyomtatható karaktert képvisel az ASCII szabványban. Ez alapvetően két lépésből áll.

Az első lépés az, hogy három bájtot négy bájtszámra konvertálunk. Az ASCII szabvány minden karaktere hét bitből áll. A Base64 csak 6 bitet használ (2 ^ 6 = 64 karakter), hogy a kódolt adatok nyomtathatóak és humánusan olvashatóak legyenek. Az ASCII-ban rendelkezésre álló speciális karakterek egyike sem használható.

A 64 karakter (tehát a Base64 név) 10 számjegyből, 26 kisbetűs karakterből, 26 nagybetűből, valamint '+' és '/' karakterből áll.

Ha például a három bájt 155, 162 és 233, a megfelelő (és ijesztő) bitfolyam 100110111010001011101001, ami viszont a 6-bites 38, 58, 11 és 41 értékeknek felel meg.

Ezeket a számokat az ASCII karakterekké konvertálják a második lépésben a Base64 kódoló táblával. A példánk 6 bites értékei az "m6Lp" ASCII szekvenciára fordulnak elő.

Ezt a kétlépcsős folyamatot a kódolt bájtok egész sorozata alkalmazza. Annak érdekében, hogy a kódolt adatok megfelelően nyomtathatók legyenek és ne lépjék túl a levélkiszolgáló vonalhossz-korlátját, az új sor karakterek beillesztésre kerülnek, hogy a sorok hossza ne legyen 76 karakter alatt. Az újsor karakterek kódolása, mint minden más adat.

A végső játék megoldása

A kódolási folyamat végén probléma merülhet fel. Ha az eredeti adatok bájtban háromszorosak, minden rendben működik. Ha nem, akkor egy vagy két 8 bites byte-ot érhetünk el. A megfelelő kódoláshoz azonban pontosan három bájt szükséges.

A megoldás az, hogy elég számú bájtot "0" értékkel egészítsen ki egy 3 bájtos csoport létrehozásához. Két ilyen értéket csatolunk, ha van egy extra byte adat, az egyikhez két extra byte tartozik.

Természetesen ezek a mesterséges "0-k" nem kódolhatók az alábbi kódolási táblázattal. 65. karaktert kell képviselnie.

A Base64 párnázó karakter '='. Természetesen csak a kódolt adatok végén jelenhet meg.

Base64 kódolási táblázat

Érték faszén Érték faszén Érték faszén Érték faszén
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 én 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 n 55 3
8 én 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 egy 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 /