Kodowanie tekstu i plików do Base64

Zamień tekst, surowe bajty lub dowolny plik na Base64. Wybierz zestaw znaków, którego oczekuje odbiorca, zachowaj lub usuń dopełnienie =, a na potrzeby MIME i PEM zawijaj wiersze co 76 lub 64 znaki.

Działa w całości w przeglądarce. Nic nie jest wysyłane.

Jak używać

  1. Wpisz lub wklej tekst do zakodowania, ustaw „Wejście jako” na „Hex”, aby zakodować surowe bajty, albo kliknij „Otwórz plik”, aby zakodować plik.
  2. Pozostaw „Kodowanie tekstu” na UTF-8, chyba że system odbiorcy oczekuje innego zestawu znaków.
  3. Ustaw opcje: w większości przypadków pozostaw wariant „Standardowy”, wyłącz „Dopełnienie”, jeśli odbiorca go nie oczekuje, a w razie potrzeby ustaw „Zawijanie wierszy” na 76 (MIME) lub 64 (PEM) znaki.
  4. Skopiuj wynik w Base64 lub pobierz go jako plik.

Jak działa kodowanie Base64

Koder odczytuje dane wejściowe po trzy bajty. Te 24 bity są dzielone na cztery grupy po 6 bitów, a każda 6-bitowa wartość (od 0 do 63) wybiera jeden znak: A-Z dla wartości od 0 do 25, a-z dla 26–51, 0-9 dla 52–61, a następnie + i /. Na wejściu trzy bajty, na wyjściu cztery znaki – dlatego Base64 jest o około 33% większy od oryginalnych danych.

Tekst    M        a        n
Bajty    77       97       110
Bity     01001101 01100001 01101110
6 bitów  010011 010110 000101 101110
Indeks   19     22     5      46
Base64   T      W      F      u

Dopełnienie i długość wyniku

Gdy długość danych wejściowych nie jest wielokrotnością trzech, ostatnia grupa jest niepełna. Jeden pozostały bajt daje dwa znaki i ==, a dwa pozostałe bajty – trzy znaki i jeden =. Wynik z dopełnieniem ma więc zawsze długość 4 × ceil(n / 3) znaków dla n bajtów wejściowych.

Dopełnienie nie niesie żadnych danych. JSON Web Token, parametry URL i wiele interfejsów API je pomijają, dlatego jeśli strona odbierająca oczekuje wyniku bez dopełnienia, wyłącz opcję „Dopełnienie”. W przypadku linków i nazw plików wybierz wariant bezpieczny dla URL albo użyj strony Base64URL; oba rozwiązania zastępują + i / znakami - i _.

Zawijanie wierszy dla MIME i PEM

Domyślnie wynik jest jednym długim wierszem – właśnie tego wymagają JSON, data URI i nagłówki HTTP. Dwa formaty oczekują jednak podziału na wiersze:

  • MIME, 76 znaków. Załączniki e-mail wysyłane z nagłówkiem Content-Transfer-Encoding: base64 nie mogą mieć wierszy dłuższych niż 76 znaków (RFC 2045). Ta opcja kończy wiersze znakami CRLF, zgodnie z wymaganiami MIME.
  • PEM, 64 znaki. Certyfikaty i klucze zapisane między wierszami -----BEGIN i -----END mają wiersze o długości 64 znaków (RFC 7468). Ta opcja kończy wiersze znakiem LF.

Zestawy znaków i pliki

Base64 koduje bajty, a nie litery, dlatego tekst jest najpierw zamieniany na bajty według wybranego zestawu znaków. Litera é zajmuje dwa bajty w UTF-8, ale tylko jeden w ISO-8859-1 lub Windows-1252, więc ten sam tekst daje różne wyniki w Base64. UTF-8 to właściwy wybór dla stron WWW, JSON i niemal każdego nowoczesnego API; GBK, Shift_JIS, Windows-1251 lub inny zestaw znaków warto wybrać tylko wtedy, gdy trzeba dopasować się do starszego systemu.

Pliki są kodowane dokładnie w takiej postaci, w jakiej zostały zapisane, bez konwersji zestawu znaków. Obrazy wraz z gotowymi fragmentami HTML i CSS można zakodować w narzędziu Obraz na Base64, a data URI z wykrytym typem MIME uzyskać w narzędziu Plik na Base64.

Specyfikacja

AlfabetA-Z a-z 0-9 + /
Rozmiar wyniku4 znaki na 3 bajty (ok. 133%)
Dopełnienie= do wielokrotności 4 znaków
StandardRFC 4648, sekcja 4
Rozróżnia wielkość literTak

Przykłady

Wejście (UTF-8)Wyjście
Hello, World!SGVsbG8sIFdvcmxkIQ==
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

Najczęściej zadawane pytania

Dlaczego wynik Base64 różni się od wyniku z innego kodera?
Niemal zawsze dlatego, że różnią się bajty wejściowe. Typowe przyczyny to końcowy znak nowego wiersza (dodaje go polecenie powłoki echo; zamiast niego użyj printf '%s' lub echo -n), inny zestaw znaków, znaki końca wiersza w stylu Windows w tekście albo inne ustawienia dopełnienia, alfabetu lub zawijania wierszy. Te same bajty przy tych samych opcjach zawsze dają ten sam wynik.
Jak zakodować tekst Unicode w Base64 w JavaScripcie?
Funkcja btoa() przyjmuje tylko znaki do U+00FF i dla wszystkich pozostałych zgłasza błąd. Najpierw zamień ciąg na bajty UTF-8, np. btoa(String.fromCharCode(...new TextEncoder().encode(str))). W Node.js użyj Buffer.from(str, 'utf8').toString('base64').
Jak zakodować dane w Base64 w wierszu poleceń?
W systemie Linux lub macOS uruchom printf '%s' 'your text' | base64. GNU base64 domyślnie zawija wynik co 76 znaków (dodaj -w 0, aby uzyskać jeden wiersz), a openssl base64 – co 64 znaki (dodaj -A).
Czy kodowanie Base64 to forma szyfrowania?
Nie. Base64 nie używa żadnego klucza i każdy może odwrócić kodowanie za pomocą dekodera Base64. Służy do przesyłania danych binarnych kanałami, które akceptują wyłącznie tekst, a nie do ukrywania informacji.
O ile Base64 zwiększa rozmiar danych?

Każde 3 bajty zamieniają się w 4 znaki, z zaokrągleniem w górę do pełnej grupy, więc wynik jest o około 33% większy. Zawijanie wierszy MIME dodaje jeszcze dwa bajty (CRLF) na każde 76 znaków.