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

 
Base64-da

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:

  1. a kódolás két utolsó karaktere nem + és /, hanem - és _
  2. a kód végén nincsenek hosszkitöltő egyenlőségjelek
  3. nincs sorokra tördelés

Kapcsolódó szócikkek szerkesztés

További információk szerkesztés