Wyjaśniono kodowanie Base64: co to jest i kiedy go używać
Base64 jest obecny wszędzie w tworzeniu stron internetowych — osadzany w nagłówkach wiadomości e-mail, zapisywany w identyfikatorach URI danych, używany w tokenach uwierzytelniających i owijany wokół plików binarnych w protokołach tekstowych. Ale o co tak naprawdę chodzi? A jeśli szyfruje dane, czy nie oznacza to, że są bezpieczne? Odpowiedź brzmi nie: Base64 to kodowanie, a nie szyfrowanie. Jest to sposób na reprezentowanie danych binarnych lub dowolnych w postaci zwykłego tekstu ASCII i nic więcej. Zrozumienie, kiedy i dlaczego go używać, może wyjaśnić wiele mylących momentów w rozwoju.
Co to jest Base64?
Base64 to metoda kodowania danych binarnych w 64 bezpiecznych znakach ASCII — literach A–Z, a–z, cyfrach 0–9, znakach plus i ukośnikach. Działa poprzez pobieranie danych binarnych (tekstu, obrazów lub nieprzetworzonych bajtów) i dzielenie ich na 6-bitowe fragmenty. Każdy fragment staje się indeksem alfabetu Base64, więc wynikiem jest zawsze czytelny tekst. „64” odnosi się do rozmiaru alfabetu: 26 + 26 + 10 + 2 = 64 znaki.
Dlaczego 64? Ponieważ te znaki są bezpieczne w prawie wszystkich systemach — e-mailach, starych terminalach, XML, JSON i zwykłym tekście. Plik binarny może zostać uszkodzony podczas przesyłania, jeśli bajty specjalne zostaną błędnie zinterpretowane; Base64 gwarantuje, że dane wyjściowe pozostaną niezmienione w dowolnym kanale tekstowym. Możesz kodować i dekodować Base64 natychmiast w przeglądarce, bez konieczności przesyłania danych gdziekolwiek.
Base64 nie jest szyfrowaniem
Oto zasadnicza różnica: Base64 zakłóca wygląd danych, ale każdy może to odwrócić. Jeśli kodujesz hasło w formacie Base64 secret123, staje się c2VjcmV0MTIz — ale to nie jest bezpieczne. Dekodowanie jest równie proste. Base64 to zaciemnianie transmisji, a nie ochrona bezpieczeństwa. Jeśli chcesz zachować dane w tajemnicy, użyj szyfrowania (np. AES), a nie Base64. Base64 umożliwia bezpieczne wysyłanie zaszyfrowanych danych kanałem tekstowym, ale nie jest to samo szyfrowanie.
Typowe zastosowania Base64
Base64 jest standardem w kilku rzeczywistych scenariuszach:
- Identyfikatory URI danych. Zamiast łączyć się z plikiem obrazu, możesz osadzić obraz bezpośrednio w formacie HTML lub CSS jako identyfikator URI danych:
data:image/png;base64,iVBORw0KG…. Pozwala to uniknąć dodatkowego żądania HTTP, co jest przydatne w przypadku małych ikon lub gdy zasoby nie mogą być hostowane osobno. - Załączniki do wiadomości e-mail. SMTP (protokół e-mail) został zaprojektowany dla tekstu. Załączniki binarne są przed wysłaniem kodowane w formacie Base64, a następnie dekodowane przez klienta poczty po otrzymaniu.
- Tokeny uwierzytelniające. Wiele interfejsów API używa Base64 do tokenów — nie ze względów bezpieczeństwa, ale dlatego, że tokeny to często dane binarne, które należy przesyłać jako czytelny tekst w nagłówkach lub adresach URL.
- Osadzanie plików w formacie JSON lub XML. Jeśli chcesz dołączyć binarny obiekt BLOB (plik PDF, arkusz kalkulacyjny, archiwum) do odpowiedzi API JSON, Base64 koduje go jako ciąg znaków, który nie naruszy struktury JSON.
Narzut związany z rozmiarem: Base64 zwiększa rozmiar danych
Wada: dane wyjściowe Base64 są o około 33% większe niż oryginalne pliki binarne. Dzieje się tak, ponieważ 8 bitów danych wejściowych jest pakowanych w 6-bitowe fragmenty, a dopełnienie jest potrzebne, gdy długość danych wejściowych nie jest wielokrotnością 3. Jeśli więc osadzasz obraz o wielkości 300 KB jako identyfikator URI danych, wersja Base64 ma około 400 KB — ładowanie i analizowanie jest wolniejsze. W przypadku małych ikon ten narzut jest wart zapisanego żądania HTTP; w przypadku dużych plików zazwyczaj lepiej jest połączyć je osobno.
Warianty i powiązane kodowanie
Standardowe zastosowania Base64 + I /, które mają specjalne znaczenie w adresach URL i nazwach plików. Bezpieczny adres URL Base64 substytuty - I _ zamiast tego, dzięki czemu można go bezpiecznie używać w ścieżkach i ciągach zapytań bez kodowania procentowego. Jeśli tworzysz niestandardowy schemat kodowania adresu URL, zastanów się, czy Kodowanie adresu URL lub bezpieczny dla adresów URL Base64 odpowiada Twoim potrzebom.
Base64 to jedno z kilku kodowań, które rozwiązują różne problemy. Kodowanie szesnastkowe reprezentuje plik binarny jako dwa czytelne znaki na bajt (wolniejsze dekodowanie, ale bez dopełnienia i czytelne dla człowieka), często używane w skrótach i sumach kontrolnych. Elementy HTML kodować znaki specjalne, takie jak < I & aby wyświetlały się poprawnie na stronach internetowych — to inny problem niż dowolny transport binarny. Każde kodowanie jest narzędziem do określonego zadania.