🔄

Czym jest kodowanie Base64 i kiedy go używać?

Praktyczne wyjaśnienie Base64 - co naprawdę robi, dlaczego istnieje i w jakich rzeczywistych sytuacjach będziesz go potrzebować.

· 6min czytania

Base64 to jedno z tych narzędzi, które brzmi tajemniczo - dopóki go nie znasz. A potem nagle widzisz go wszędzie. Jest w URL-ach obrazów osadzonych na stronach, w tokenach uwierzytelniających twoje wywołania API, w załącznikach każdego maila, jaki kiedykolwiek istniał, i w kodach QR, które skanujesz w restauracjach.

Mimo powszechnego użycia Base64 jest często źle rozumiany. Ludzie myślą, że to szyfrowanie (nie jest). Ludzie myślą, że robi dane mniejszymi (robi je większymi). Ludzie myślą, że to format kompresji (to przeciwieństwo).

Definicja w jednej linii

Base64 to sposób reprezentowania danych binarnych jako stringa z bezpiecznych, drukowalnych znaków tekstowych.

To wszystko. Nie kompresuje, nie szyfruje, nie zaciemnia. Po prostu konwertuje z formatu, który jest kruchy (bajty binarne), do formatu, który jest odporny (tekst ASCII).

Problem, który Base64 rozwiązuje

Komputery przechowują wszystko jako binarne - sekwencje bitów, pogrupowane w bajty. Bajt może mieć dowolną wartość od 0 do 255. Większość tych wartości nie odpowiada drukowalnym znakom; wiele znaczy coś specjalnego dla różnych systemów:

  • Bajt 0 to znak “null”, który kończy stringi w C
  • Bajt 10 to znak nowej linii
  • Bajt 13 to powrót karetki
  • Bajty 128-255 w ogóle nie są ASCII - są interpretowane różnie przez różne kodowania

Jeśli spróbujesz wysłać surowe dane binarne przez system, który spodziewa się tekstu - jak ciało maila, string JSON, URL, atrybut XML lub linia SQL - coś się zmasakruje. Wartość bajtu 13 zostanie zinterpretowana jako nowa linia, bajt 0 utnie string, bajt powyżej 127 zostanie przekonwertowany na nieoczekiwany znak.

Base64 rozwiązuje to, używając tylko 64 “bezpiecznych” znaków: wielkie litery A-Z, małe litery a-z, cyfry 0-9 i symbole + i / (plus = do paddingu). Każda możliwa kombinacja bajtów może być zakodowana tymi znakami. Wyjście ma gwarancję przejścia przez dowolny system tekstowy bez uszkodzenia.

Jak to działa

Base64 bierze dane po 3 bajty na raz i konwertuje każdy 3-bajtowy kawałek w 4 znaki. Każdy znak reprezentuje 6 bitów danych (bo 2⁶ = 64).

3 bajty (24 bity) → 4 znaki base64 (24 bity)

Jeśli wejście nie jest podzielne przez 3, ostatni kawałek jest uzupełniany znakami =. Dlatego Base64 powiększa dane dokładnie o 33%. Plik 1000-bajtowy staje się ~1334 bajtami.

Gdzie spotkasz Base64 w praktyce

Załączniki maili

Email był oryginalnie zaprojektowany do przenoszenia tylko 7-bitowego ASCII. Gdy dołączasz zdjęcie do maila, system pocztowy koduje je w Base64, żeby przetrwało podróż przez legacy’owe serwery. To obsługiwane automatycznie przez klienta poczty - nigdy nie widzisz kodowania - ale pod maską każdy obraz, PDF i ZIP, które kiedykolwiek wysłałeś mailem, były Base64.

Data URI w HTML/CSS

Data URI osadza plik bezpośrednio w dokumencie HTML lub CSS jako string Base64:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAA..." />
.icon {
 background: url('data:image/svg+xml;base64,PHN2Zy...');
}

Przeglądarka dekoduje Base64 i renderuje obraz, jakby załadowany z pliku. Przydatne dla maleńkich ikon i pikseli śledzących 1×1.

JSON z payloadami binarnymi

JSON jest tylko tekstowy - nie możesz włożyć surowych bajtów binarnych do stringa JSON. Gdy API musi zawrzeć dane binarne (obraz, certyfikat, podpis), koduje dane w Base64:

{
 "filename": "avatar.png",
 "content": "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAAC..."
}

To powszechne w REST API do uploadu plików, webhookach i usługach obsługujących klucze kryptograficzne.

Tokeny uwierzytelniania

JWT (JSON Web Tokens), tokeny bearer OAuth i różne klucze API są zakodowane w Base64. Przykład JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJS...

Każdy segment między kropkami jest osobno zakodowany w Base64. Pierwszy dekoduje się do {"alg":"HS256","typ":"JWT"}.

URL-e

Wariant “Base64 URL-safe” zastępuje znaki + i / (mające specjalne znaczenia w URL-ach) przez - i _. Pozwala osadzać dane Base64 w URL-ach bez kodowania - używane intensywnie dla krótkich URL-i, tokenów udostępniania i kompaktowych ID.

Czym Base64 NIE jest

To część najbardziej źle rozumiana.

Nie jest szyfrowaniem. Base64 jest odwracalne przez każdego, natychmiast, bez klucza. To publiczny schemat kodowania. Jeśli “szyfrujesz” wrażliwe dane kodując je w Base64, każdy kto przechwyci string może go rozkodować w milisekundach. To kodowanie, nie szyfrowanie. Różnica jest kluczowa.

Nie jest kompresją. Base64 zwiększa rozmiar danych o 33%. Jeśli rozmiar ma znaczenie, zwykle najpierw kompresujesz (gzip, brotli), a potem kodujesz wynik w Base64.

Nie jest zaciemnianiem, na którym ktokolwiek powinien polegać. Hasło zakodowane w Base64 to hasło jawne z trywialnym dodatkowym krokiem.

Kiedy używać Base64

Sięgaj po Base64, gdy:

  • Musisz transmitować lub przechowywać dane binarne przez kanał tylko tekstowy (JSON, email, URL, XML)
  • Osadzasz małe pliki bezpośrednio w HTML lub CSS (data URI)
  • Pracujesz z systemem wymagającym konkretnego wejścia zakodowanego w Base64 (JWT, OAuth, certyfikaty)
  • Musisz udostępnić dane binarne przez kopiuj-wklej

Nie używaj Base64, gdy chcesz chronić dane (użyj szyfrowania), gdy chcesz oszczędzić bajty (użyj kompresji), gdy masz dostępny kanał binarnie bezpieczny (po prostu wyślij bajty), albo gdy dwa systemy mogłyby użyć współdzielonego systemu plików lub object storage.

Kodowanie vs dekodowanie w praktyce

Nasze narzędzie Base64 obsługuje oba kierunki. Możesz kodować tekst wpisany w pole albo plik, który przeciągniesz. Możesz dekodować string Base64 z powrotem do tekstu albo pobrać oryginalny plik binarny. Wszystko w przeglądarce - dane nigdy nie opuszczają urządzenia, co ma znaczenie przy tokenach, kluczach lub wrażliwych dokumentach.

Szybka ściąga

PotrzebaRozwiązanie
Osadzić obraz w HTML bez osobnego żądaniaData URI zakodowany w Base64
Wysłać plik binarny w API JSONZakoduj plik w Base64, umieść string w polu JSON
Zdekodować JWT, żeby zobaczyć jego claimsZdekoduj każdy segment z Base64
Udostępnić mały plik binarny przez czatZakoduj w Base64, wklej, odbiorca dekoduje
Ukryć dane przed użytkownikamiSzyfrowanie, nie Base64
Zmniejszyć plikiKompresja, nie Base64

Base64 to tłumacz, nie sejf. Konwertuje dane binarne na tekst, żeby mogły podróżować przez systemy tylko tekstowe - nic więcej. Gdy to zrozumiesz, zaczniesz go widzieć wszędzie i będziesz dokładnie wiedzieć, kiedy go używać. Pełny workflow dekoduj-i-koduj zajmuje około 10 sekund na plik w naszym narzędziu Base64, a ponieważ wszystko działa lokalnie, możesz spokojnie kodować wrażliwe materiały bez martwienia się, gdzie ląduje string.