Base64

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

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *