Base64
A Base64 kódolás 64 karakterből álló ábécén alapuló tartalomkódolási forma, melynek segítségével bináris, illetve speciális karaktereket tartalmazó adatokból ASCII karaktersorozat állítható elő. Az ily módon kódolt adatok akár a karaktereket 7 biten ábrázoló rendszereken is könnyen átvihetők.
Működése
[szerkesztés]A base64 kódolás során a kódolandó adathalmazt először 3 bájtból álló egységekre bontjuk, majd ezt az egységet bináris formára (24 bitre) alakítjuk. A 24 bitet ezután 6 bites darabkákra kell felszabdalni, majd az így kapott, 6 biten ábrázolt számokat indexként használva kell kikeresni a kódtáblából a kódolt karaktert. Látható, hogy a kódolás révén minden három kódolatlan karakter négy kódolttá alakul. (Megjegyzés: nem szükséges, hogy a bemenet (bájtokban mért) hossza hárommal osztható legyen; ha az input hossza n, akkor az output hossza egészrész((4n+2)/3), amit rendszerint egyenlőségjelekkel egészítünk ki néggyel osztható hosszúságra.
Az egyes bithatosokat reprezentáló karakterek (64 db) az alábbiak: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
A kódolt szövegben előfordulhat még:
- egyenlőségjel ('='), amellyel a kódolt szöveget szokás néggyel osztható hosszúságúra kiegészíteni
- kocsi-vissza, a visszafejtésnél figyelmen kívül kell hagyni
- soremelés, a visszafejtésnél figyelmen kívül kell hagyni
Elgondolás
[szerkesztés]A 64 karaktert úgy választották ki, hogy azok megtalálhatóak a legtöbb alap kódolási formában, valamint nyomtathatóak. Így vélhetően mindent rendszeren hiba nélkül tovább küldhető, például e-mailben, ami nem tradicionális 8 bites alapot használ.
A Base64 kódtábla
[szerkesztés]Ez az RFC 4648 §4-ben meghatározott Base64 ábécé.
Érték | Bináris | Karakter | Érték | Bináris | Karakter | Érték | Bináris | Karakter | Érték | Bináris | Karakter | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 000000 | A |
16 | 010000 | Q |
32 | 100000 | g |
48 | 110000 | w
| |||
1 | 000001 | B |
17 | 010001 | R |
33 | 100001 | h |
49 | 110001 | x
| |||
2 | 000010 | C |
18 | 010010 | S |
34 | 100010 | i |
50 | 110010 | y
| |||
3 | 000011 | D |
19 | 010011 | T |
35 | 100011 | j |
51 | 110011 | z
| |||
4 | 000100 | E |
20 | 010100 | U |
36 | 100100 | k |
52 | 110100 | 0
| |||
5 | 000101 | F |
21 | 010101 | V |
37 | 100101 | l |
53 | 110101 | 1
| |||
6 | 000110 | G |
22 | 010110 | W |
38 | 100110 | m |
54 | 110110 | 2
| |||
7 | 000111 | H |
23 | 010111 | X |
39 | 100111 | n |
55 | 110111 | 3
| |||
8 | 001000 | I |
24 | 011000 | Y |
40 | 101000 | o |
56 | 111000 | 4
| |||
9 | 001001 | J |
25 | 011001 | Z |
41 | 101001 | p |
57 | 111001 | 5
| |||
10 | 001010 | K |
26 | 011010 | a |
42 | 101010 | q |
58 | 111010 | 6
| |||
11 | 001011 | L |
27 | 011011 | b |
43 | 101011 | r |
59 | 111011 | 7
| |||
12 | 001100 | M |
28 | 011100 | c |
44 | 101100 | s |
60 | 111100 | 8
| |||
13 | 001101 | N |
29 | 011101 | d |
45 | 101101 | t |
61 | 111101 | 9
| |||
14 | 001110 | O |
30 | 011110 | e |
46 | 101110 | u |
62 | 111110 | +
| |||
15 | 001111 | P |
31 | 011111 | f |
47 | 101111 | v |
63 | 111111 | /
| |||
padding | = |
Példák
[szerkesztés]Az angol Man szó kódolása
[szerkesztés]Szöveg | M | a | n | |||||||||||||||||||||
ASCII kód | 77 | 97 | 110 | |||||||||||||||||||||
Bitminta | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
Kódtábla indexe | 19 | 22 | 5 | 46 | ||||||||||||||||||||
Base64-kódolt | T | W | F | u |
Ma szó kódolása
[szerkesztés]Eredeti bemenet | Szöveg | M | a | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ASCII kód | 77 (0x4d) | 97 (0x61) | |||||||||||||||||||||||
Bitminta | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |||||||
Base64-kódolt | Kódtábla indexe | 19 | 22 | 4 | Padding | ||||||||||||||||||||
Karakterek | T | W | E | = | |||||||||||||||||||||
Oktetek | 84 (0x54) | 87 (0x57) | 69 (0x45) | 61 (0x3D) |
Az AbCd szó kódolása
[szerkesztés]Az AbCd szó karaktereinek ASCII kódjai (decimálisan): 65, 98, 67, 100. Ezek bináris formája: 01000001, 01100010, 01000011, 01100100. Az így kapott 32 bit hatos csoportokra bontva (kiegészítve nullákkal): 010000, 010110, 001001, 000011, 011001, 000000, melyek megadják a kódtáblabeli indexeket: 16, 22, 9, 3, 25, 0. Az egyes bithatosokhoz tartozó jelek a táblázat alapján: QWJDZA, kiegészítve néggyel osztható hosszra: QWJDZA==.
Egy változat: Base64URL
[szerkesztés]Ez a változat az alábbiakban különbözik a Base64-tól:
- a kódolás két utolsó karaktere nem
+
és/
, hanem-
és_
- a kód végén nincsenek hosszkitöltő egyenlőségjelek
- nincs sorokra tördelés