Co oznaczają kodowanie i dekodowanie Base64?
Kodowanie w Base64 (« encode base64 ») zamienia bajty — najczęściej bajty tekstu zakodowanego w UTF-8 — w ciąg z 64 dozwolonych znaków: 26 wielkich liter, 26 małych liter, 10 cyfr, a następnie + i /. Dekodowanie Base64 (« decode base64 ») wykonuje dokładnie operację odwrotną: ciąg jest odczytywany po 4 znaki, każdy znak wskazuje 6 bitów, a 24 bity dają 3 bajty. To właśnie na tym przejściu w obie strony zależy większości osób, gdy wpisują « encode and decode base64 ».
Base64 nie jest ani kompresją, ani szyfrowaniem: tekst staje się o około jedną trzecią dłuższy i każdy może go odczytać w jedną sekundę. Jego sens to przesyłanie bajtów kanałami, które akceptują tylko bezpieczne znaki ASCII — adresy URL, nagłówki HTTP, pliki konfiguracyjne, JSON, SVG inline, e-maile, bazy danych tekstowe.
Jak zakodować tekst w Base64
Krok 1: tekst jest najpierw zamieniany na bajty w wybranym kodowaniu — domyślnie UTF-8, ale Latin-1, Windows-1252, ASCII lub UTF-16 nadal przydają się przy starszych systemach. Krok 2: bajty są odczytywane po trzy, czyli 24 bity. Krok 3: te 24 bity są dzielone na cztery bloki po 6 bitów, a każdy blok jest zastępowany znakiem o odpowiedniej pozycji w alfabecie. Krok 4: jeśli ostatnia grupa jest niepełna, uzupełnia się ją zerami, a ciąg zamyka jednym lub dwoma = (padding).
Przykład krok po kroku: « AB » to w dziesiętnych 65, a potem 66, czyli 01000001 01000010. W trzech bajtach z uzupełnieniem: 01000001 01000010 00000000. Cztery grupy po 6 bitów to 010000 010100 001000 000000 → pozycje 16, 20, 8, 0 → QUI=. Po prostu wpisz « AB » w koderze: wynik pojawi się jeszcze przed puszczeniem klawisza.
Jak odkodować Base64 na tekst
Dekodowanie odczytuje ciąg po 4 znaki, po uprzednim usunięciu znaków końca wiersza i ewentualnych spacji. Każdy znak jest zamieniany na swoją wartość 6-bitową, cztery wartości są łączone w 24 bity, a następnie 24 bity są dzielone na 3 bajty. Końcowe = informują, ile faktycznie użytecznych bajtów zawiera ostatnia grupa: jeden = oznacza 2 bajty, dwa = oznaczają 1 bajt.
Jeśli ciąg zawiera - lub _, to jest to wariant URL-safe: narzędzie automatycznie zamienia je na + i / przed dekodowaniem. Jeśli brakuje paddingu, przycisk « Napraw padding » go przywraca. W przypadku znaku spoza alfabetu, « = » w złym miejscu lub długości niebędącej wielokrotnością 4, błąd jest wyświetlany z dokładnym powodem, zamiast prostego « nieprawidłowe ».
Wariant URL-safe (RFC 4648 §5)
Base64 standardowe używa + i /, dwóch znaków, które sprawiają problemy w URL: + jest interpretowany przez większość serwerów jako spacja, a / może być mylony z separatorem ścieżki. Wariant URL-safe zastępuje je - i _, które nie wymagają escapowania. Jest obowiązkowy w JWT (trzy segmenty tokena są kodowane bez paddingu), w plikach cookie, a także w identyfikatorach oraz parametrach URL.
Padding « = » : do czego służy
Base64 pracuje w grupach po 4 znaki, ale rozmiar pliku prawie nigdy nie jest wielokrotnością 3 bajtów. Padding przywraca oczekiwaną długość: pozostały 1 bajt daje ==, a pozostałe 2 bajty dają =. Niektóre systemy go usuwają (niektóre API, Base64URL), inne go wymagają (PHP, starsze dekodery). Opcja « Bez paddingu » w koderze i przycisk « Napraw padding » w dekoderze obsługują oba przypadki.
Kodowanie znaków: UTF-8, Latin-1, UTF-16
Base64 nie zna znaków, tylko bajty. Kluczowe pytanie brzmi więc: w czym kodujemy tekst zanim powstanie Base64? W UTF-8 « é » zajmuje 2 bajty, a « 日 » 3 ; w Latin-1 « é » mieści się w 1 bajcie, ale « 日 » staje się niemożliwe. Dekodowanie UTF-8 ciągu zakodowanego w Latin-1 daje dziwaczne znaki (« mojibake »). Jeśli korzystasz z narzędzia online, a wynik jest niezrozumiały, prawie zawsze chodzi o inne kodowanie źródłowe — stąd sześć opcji dostępnych tutaj.
Plik, data URI i obrazy w Base64
Format data URI ma postać data:<typ MIME>;base64,<dane>. Pozwala bezpośrednio osadzić obraz w CSS, HTML lub JSON: background-image:url(data:image/png;base64,iVBOR…). Aby odkodować, wklej cały ciąg w zakładce « Plik ⇄ Base64 »: typ MIME jest wydobywany, proponowana jest nazwa, a plik zostaje odtworzony i gotowy do pobrania. Uważaj na rozmiar: Base64 dodaje około 33 %, a data URI nigdy nie jest cache'owane osobno.
Base64, URL-encoding i dlaczego nie mylić ich ze sobą
Technika percent-encoding (%20, %C3%A9) zastępuje każdy niedozwolony bajt procentem: jest dwa do trzech razy dłuższe od Base64, ale wizualnie zachowuje oryginalny tekst. Base64 daje zwarty i regularny ciąg, idealny dla blobów, ale nieczytelny. Zakładka « URL & data URI » pokazuje obie konwersje obok siebie, żeby uniknąć klasycznego błędu zakodowania URL w Base64 zamiast go zescapować — albo odwrotnie.
Base64 w codziennych formatach
Base64 jest wszędzie: trzy segmenty JWT, atrybut src obrazu SVG inline, pole cert w PDF, załączniki MIME e-maili (RFC 2045), nagłówek Authorization: Basic w API (użytkownik:hasło), pliki .pem i klucze SSH, zawartość plików .docx i .xlsx (ZIP), awatary w pamięci klienta oraz data- atrybuty w testach automatycznych. Szybkie kodowanie i dekodowanie pozwala nie otwierać terminala dla jednego ciągu.
Czym Base64 nie jest
Base64 niczego nie szyfruje: zakodowany ciąg odszyfrowuje się w jednej linijce kodu. Nigdy nie używaj go jako ochrony hasła, klucza API ani danych osobowych. To także nie jest kompresja: zawsze planuj 33 % więcej miejsca. Wreszcie Base64 nie nadaje się dla już gęsto skompresowanych binariów (PNG, ZIP) powyżej kilku megabajtów, gdzie koszt pamięci staje się dotkliwy.
Wydajność i dobre praktyki
W przeglądarce, TextEncoder i TextDecoder przetwarzają kilka megabajtów na sekundę; sam algorytm Base64 jest liniowy, bez rekursji i bez alokacji na znak. Pliki większe niż 5 MB mogą spowalniać interfejs: przy większych partiach lepiej przetwarzać w Web Workerze lub po stronie serwera. Zawsze przechowuj oryginalne kodowanie obok ciągu i testuj round-trip (kodowanie, a potem dekodowanie) przed zapisaniem wyniku w bazie danych.
Polecane dla
programistów backendu i frontendu (tokeny, data URI, nagłówki HTTP), integratorów i autorów treści technicznych (SVG inline, obrazy tła), administratorów systemu i DevOpsów (certyfikaty, klucze, zrzuty), testerów i pentesterów (Authorization Basic, fuzzing parametrów), studentów (zrozumienie bajtów, ASCII i UTF-8) oraz każdej osoby potrzebującej kodera i dekodera Base64 online szybkiego, kompletnego i dyskretnego.