Jak działa kodowanie Base64
Kodowanie Base64 to proces konwertowania danych binarnych na format ciągu ASCII przez konwersję tych danych binarnych na 6-bitową reprezentację znaków. Metoda kodowania Base64 jest używana, gdy dane binarne, takie jak obrazy lub wideo, są przesyłane przez systemy zaprojektowane do przesyłania danych w formacie zwykłego tekstu (ASCII).
Dlaczego używane jest kodowanie Base64?
Potrzeba kodowania Base64 wynika z problemów występujących podczas przesyłania multimediów w surowy format binarny do systemów tekstowych.
Ponieważ systemy tekstowe (takie jak e-mail) interpretować dane binarne jako szeroki zakres znaków, w tym specjalne znaki poleceń, większość danych binarnych przesyłany do mediów transferowych jest błędnie interpretowany przez te systemy i zostaje utracony lub uszkodzony w transmisji proces.

Jedną z metod kodowania tego rodzaju danych binarnych w sposób, który pozwala uniknąć takich problemów z transmisją, jest wysyłanie ich jako zwykłego tekstu ASCII w formacie zakodowanym w standardzie Base64. Jest to jedna z technik stosowanych przez standard MIME do wysyłania danych innych niż zwykły tekst.
Wiele języków programowania, takich jak PHP i Javascript, zawiera funkcje kodowania i dekodowania Base64 w celu interpretacji danych przesyłanych za pomocą kodowania Base64.
Logika kodowania Base64
Kodowanie Base64 dzieli dane binarne na 6-bitowe segmenty po 3 pełne bajty i przedstawia je jako znaki drukowane w standardzie ASCII. Robi to zasadniczo w dwóch krokach.
Pierwszym krokiem jest rozbicie ciągu binarnego na 6-bitowe bloki. Base64 używa tylko 6 bitów (co odpowiada 2^6 = 64 znaki), aby zapewnić, że zakodowane dane są możliwe do wydrukowania i czytelne dla człowieka. Żaden ze znaków specjalnych dostępnych w ASCII nie jest używany.
64 znaki (stąd nazwa Base64) to 10 cyfr, 26 małych liter, 26 wielkich liter oraz znak plus (+) i ukośnik (/). Istnieje również 65 znak znany jako a Podkładka, który jest znakiem równości (=). Ten znak jest używany, gdy ostatni segment danych binarnych nie zawiera pełnych 6 bitów.
Przykład kodowania Base64
Na przykład weź trzy numery ASCII 155, 162 i 233. Te trzy liczby tworzą binarny strumień 100110111010001011101001. Plik binarny, podobnie jak obraz, zawiera strumień binarny działający na dziesiątki lub setki tysięcy zer i jedynek.
Koder Base64 rozpoczyna się od podzielenia strumienia binarnego na grupy składające się z sześciu znaków: 100110 111010 001011 101001. Każda z tych grup przekłada się na liczby 38, 58, 11 i 41.
Sześcioznakowy strumień binarny konwertuje znaki binarne (o podstawie 2) na dziesiętne (o podstawie 10) przez podniesienie do kwadratu każdej wartości reprezentowanej przez 1 w sekwencji binarnej z jej kwadratem pozycyjnym. Zaczynając od prawej i przesuwając się w lewo i zaczynając od zera, wartości w strumieniu binarnym reprezentują 2^0, potem 2^1, potem 2^2, potem 2^3, potem 2^4, a potem 2^5.
Oto inny sposób patrzenia na to. Począwszy od lewej, każda pozycja jest warta 1, 2, 4, 8, 16 i 32. Jeśli liczba binarna ma 1 w gnieździe, dodajesz tę wartość; jeśli ma 0 w gnieździe, nie masz. Ciąg binarny 100110 zamienia się na liczbę dziesiętną 38: 0*2^01 + 1*2^1 + 1*2^2 + 0*2^3 + 0*2^4 + 1*2^5 = 0+2 +4+0+0+32.
Kodowanie Base64 bierze ten ciąg binarny i dzieli go na 6-bitowe wartości 38, 58, 11 i 41.
Na koniec liczby te są konwertowane na znaki ASCII przy użyciu tabeli kodowania Base64. Wartości 6-bitowe z tego przykładu przekładają się na sekwencję ASCII m6Lp.
Korzystanie z tabeli konwersji Base64:
- 38 to m
- 58 to 6
- 11 to L
- 41 to p
Ten dwuetapowy proces jest stosowany do całego zakodowanego ciągu binarnego.
Aby upewnić się, że zakodowane dane mogą być poprawnie wydrukowane i nie przekraczają limitu długości linii żadnego serwera pocztowego, wstawiane są znaki nowego wiersza, aby długość linii nie przekraczała 76 znaków. Znaki nowej linii są kodowane jak wszystkie inne dane.
Cały cel kodowania Base64, od dodania dopełnienia w celu zachowania 3-bajtowych segmentów binarnych do konwersja binarnego na tekst za pomocą tabeli Base64, ma na celu zachowanie integralności przesyłanego pliku binarnego Informacja.
Tabela kodowania Base64
Poniższa tabela tłumaczy wszystkie 64 znaki używane w kodowaniu Base64.
Tabela kodowania Base64 | |||||||
---|---|---|---|---|---|---|---|
Wartość | Zwęglać | Wartość | Zwęglać | Wartość | Zwęglać | Wartość | Zwęglać |
0 | A | 16 | Q | 32 | g | 48 | w |
1 | b | 17 | r | 33 | h | 49 | x |
2 | C | 18 | S | 34 | i | 50 | tak |
3 | D | 19 | T | 35 | J | 51 | z |
4 | mi | 20 | U | 36 | k | 52 | 0 |
5 | F | 21 | V | 37 | ja | 53 | 1 |
6 | g | 22 | W | 38 | m | 54 | 2 |
7 | h | 23 | x | 39 | n | 55 | 3 |
8 | i | 24 | Y | 40 | o | 56 | 4 |
9 | J | 25 | Z | 41 | P | 57 | 5 |
10 | K | 26 | a | 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 | mi | 46 | ty | 62 | + |
15 | P | 31 | F | 47 | v | 63 | / |
Rozwiązanie gry końcowej
Pod koniec procesu kodowania może wystąpić problem. Jeśli rozmiar oryginalnych danych w bajtach jest wielokrotnością trzech, wszystko działa dobrze. Jeśli tak nie jest, mogą być puste bajty. Do prawidłowego kodowania potrzebne są dokładnie 3 bajty danych binarnych.
Rozwiązaniem jest dołączenie wystarczającej liczby bajtów o wartości 0, aby utworzyć grupę 3-bajtową. Dwie takie wartości są dołączane, jeśli dane wymagają jednego dodatkowego bajtu danych, jedna jest dołączana dla dwóch dodatkowych bajtów.
Oczywiście tych sztucznych końcowych zer nie można zakodować przy użyciu poniższej tabeli kodowania. Muszą być reprezentowane przez 65. znak. Znak dopełnienia Base64 to znak równości (=) i jest umieszczany na końcu zakodowanych danych.