Base64 pozwala na reprezentację danych binarnych za pomocą tekstu. Oraz późniejsze odzyskanie reprezentacji binarnej z tekstu.
Tabela transformacji
Z racji tego, że Base64 zamienia 6 bitowe sekwencje, tak też prezentuje się tabela odpowiedników:
| Numer | Bity | Znak w Base64 |
|-------|----------------|---------------|
| 1 | 000000 | A |
| 2 | 000001 | B |
| 3 | 000010 | C |
| 4 | 000011 | D |
| 5 | 000100 | E |
| 6 | 000101 | F |
| 7 | 000110 | G |
| 8 | 000111 | H |
| 9 | 001000 | I |
| 10 | 001001 | J |
| 11 | 001010 | K |
| 12 | 001011 | L |
| 13 | 001100 | M |
| 14 | 001101 | N |
| 15 | 001110 | O |
| 16 | 001111 | P |
| 17 | 010000 | Q |
| 18 | 010001 | R |
| 19 | 010010 | S |
| 20 | 010011 | T |
| 21 | 010100 | U |
| 22 | 010101 | V |
| 23 | 010110 | W |
| 24 | 010111 | X |
| 25 | 011000 | Y |
| 26 | 011001 | Z |
| 27 | 011010 | a |
| 28 | 011011 | b |
| 29 | 011100 | c |
| 30 | 011101 | d |
| 31 | 011110 | e |
| 32 | 011111 | f |
| 33 | 100000 | g |
| 34 | 100001 | h |
| 35 | 100010 | i |
| 36 | 100011 | j |
| 37 | 100100 | k |
| 38 | 100101 | l |
| 39 | 100110 | m |
| 40 | 100111 | n |
| 41 | 101000 | o |
| 42 | 101001 | p |
| 43 | 101010 | q |
| 44 | 101011 | r |
| 45 | 101100 | s |
| 46 | 101101 | t |
| 47 | 101110 | u |
| 48 | 101111 | v |
| 49 | 110000 | w |
| 50 | 110001 | x |
| 51 | 110010 | y |
| 52 | 110011 | z |
| 53 | 110100 | 0 |
| 54 | 110101 | 1 |
| 55 | 110110 | 2 |
| 56 | 110111 | 3 |
| 57 | 111000 | 4 |
| 58 | 111001 | 5 |
| 59 | 111010 | 6 |
| 60 | 111011 | 7 |
| 61 | 111100 | 8 |
| 62 | 111101 | 9 |
| 63 | 111110 | + |
| 64 | 111111 | / |
Wyjaśnienie nazwy
Base64 możemy rozbić na Base i 64. 64 to po prostu liczba znaków potrzebnych do kodowania. Słówko base można rozumieć jako – „oparte o”. Czyli oparte o 64 (znaki).
Padding – wypełniacz
Aby łatwiej móc odkodowywać Base64 używany jest tak zwany padding. Dopełnia on niepełną ostatnią grupę. Najczęściej jest to znak równości – =.
Przykład
Lecimy z przykładem. Aby zakodować imię Damian należy najpierw zamienić je na bity a następnie użyć tabelki do transformacji każdych 6 bitów na odpowiadający im znak.
Konwersja na bity (kodowanie znaków UTF-8)
'D' -> 68 -> 01000100
'a' -> 97 -> 01100001
'm' -> 109 -> 01101101
'i' -> 105 -> 01101001
'a' -> 97 -> 01100001
'n' -> 110 -> 01101110
Czyli mamy:
01000100 01100001 01101101 01101001 01100001 01101110
Grupowanie po 6 bitów
Po pogrupowaniu mamy:
010001 000110 000101 101101 011010 010110 000101 101110
Zamiana na znaki Base64
010001 -> R
000110 -> G
000101 -> F
101101 -> t
011010 -> a
010110 -> W
000101 -> F
101110 -> u
Czyli dostajemy:
RGFtYWlhbg
Dodanie paddingu
Aby dopełnić ostatnią grupę (liczymy po cztery) należy dodać dwa znaki paddingu:
RGFtYWlhbg==
Przypadki użycia
Base64 jest wykorzystywany przy:
– osadzanie plików w JSON/XML
– przesyłanie załączników wiadomości Email
Czy to kosztuje?
Ależ owszem – można przyjąć, że po zakodowaniu pliku za pomocą Base64 jest od o około 33-37% większy.
Warto zajrzeć
1. https://en.wikipedia.org/wiki/Base64
2. https://datatracker.ietf.org/doc/html/rfc4648
