Wszystkie artykuły

Base64: po co jest kodowanie i jak działa

Base64 to sposób przedstawiania dowolnych danych binarnych jako tekstu złożonego wyłącznie z liter, cyfr i znaków +, / oraz =. Nie kompresuje ani nie szyfruje danych — wynik jest około jednej trzeciej większy, a każdy, kto zna algorytm, może odczytać oryginalną zawartość.

Jak działa kodowanie

Bajty wejściowe są grupowane po trzy (24 bity) i dzielone na cztery sześciobitowe bloki. Każdy blok odpowiada jednemu znakowi z alfabetu Base64 (A–Z, a–z, 0–9, +, /). Jeśli długość danych wejściowych nie jest wielokrotnością trzech bajtów, na końcu dodawany jest znak wypełniający =.

Do czego to służy

Wiele protokołów i formatów — e-mail (MIME), adresy URL, JSON, XML — jest przeznaczonych dla tekstu i nie radzi sobie dobrze z „surowymi" bajtami: bajtami zerowymi, znakami kontrolnymi czy sekwencjami kolidującymi ze składnią formatu. Base64 omija to ograniczenie, zamieniając dowolne dane binarne w bezpieczny tekst.

Typowe zastosowania

  • Załączniki e-mail przez MIME.
  • Przesyłanie obrazów lub małych plików w API JSON.
  • Przechowywanie danych binarnych w polach tekstowych bazy danych lub pliku konfiguracyjnego.
  • Kodowanie części header i payload tokenu JWT.

Czym Base64 NIE jest

To nie jest ani szyfrowanie, ani hashowanie. Każdy może zdekodować ciąg Base64 z powrotem do oryginalnych danych bez klucza czy hasła — to wyłącznie format reprezentacji, nie zabezpieczenie.

Alfabet standardowy i URL-safe

Klasyczny alfabet Base64 wykorzystuje znaki + i /, które mają specjalne znaczenie w adresach URL i nazwach plików. Dla takich przypadków istnieje wariant Base64URL, w którym + zastąpiono -, a /_. Jeśli wynik standardowego kodowania wstawimy do URL bez dodatkowego percent-encoding, znaki + i / mogą zniekształcić adres lub kolidować z separatorami ścieżki.

Częsty błąd: obcięty lub „zepsuty" znak wypełniający

Znak = na końcu ciągu to nie śmieć, lecz część kodowania wskazująca, ile bajtów brakuje w ostatnim bloku. Jeśli skopiujemy ciąg Base64 niepełny albo usuniemy wypełnienie ręcznie, dekoder zwróci błąd lub urwany wynik. Niektóre systemy (np. JWT) celowo pomijają =, a wtedy długość trzeba odtworzyć przed dekodowaniem.

Wypróbuj narzędzie