Do czego służy Base64
Base64 istnieje po to, by przenosić dane binarne kanałami zaprojektowanymi dla tekstu. E-mail, JSON, XML, atrybuty HTML, zmienne środowiskowe i nagłówki HTTP oczekują znaków drukowalnych, a wiele z nich psuje się na surowych bajtach, takich jak znak null, znaki nowej linii czy wartości powyżej 127. Base64 zapisuje dowolny ciąg bajtów przy użyciu zaledwie 64 bezpiecznych symboli: A–Z, a–z, 0–9, + i /, z = jako dopełnieniem.
Typowe miejsca, w których go spotkasz:
- Uwierzytelnianie HTTP Basic, w którym
user:passwordjest wysyłane jakodXNlcjpwYXNzd29yZA==. - JSON Web Tokens, których trzy części rozdzielone kropkami to Base64 w wariancie URL-safe.
- Załączniki e-mail, które podróżują jako Base64 wewnątrz wiadomości MIME.
- Data URI, które osadzają małą ikonę lub czcionkę bezpośrednio w HTML lub CSS.
- Dane przesyłane do API i pliki konfiguracyjne, które muszą przenosić certyfikat, klucz lub mały blok binarny jako ciąg znaków.
Base64 to kodowanie, a nie szyfrowanie. Każdy zdekoduje go w sekundę, więc ciąg Base64 w pliku konfiguracyjnym niczego nie chroni. Jeśli chcesz sprawdzić, czy dane nie zostały zmienione, użyj zamiast tego funkcji skrótu.
Jak działa kodowanie
Koder pobiera dane wejściowe po trzy bajty naraz, czyli 24 bity, i dzieli je na cztery grupy po 6 bitów. Każda 6-bitowa wartość od 0 do 63 wybiera jeden znak z alfabetu. Trzy bajty na wejściu, cztery znaki na wyjściu — dlatego wynik Base64 jest zawsze o około 33% większy od danych wejściowych: obraz o wadze 30 KB zamienia się w mniej więcej 40 KB tekstu.
Gdy długość danych wejściowych nie jest wielokrotnością trzech, ostatnia grupa jest niepełna. Koder ją uzupełnia i oznacza lukę jednym lub dwoma znakami =. Dlatego Man koduje się jako TWFu, Ma jako TWE=, a M jako TQ==.
Tekst musi stać się bajtami, zanim da się go zakodować, a to narzędzie zawsze używa do tego UTF-8. Słowo café ma w UTF-8 pięć bajtów (é zajmuje dwa), a emoji zajmuje cztery. Dekodowanie interpretuje bajty z powrotem jako UTF-8, więc tekst w dowolnym alfabecie przechodzi w obie strony bez zmian.
Wariant URL-safe
Dwa znaki standardowego alfabetu sprawiają kłopot poza zwykłym tekstem. W adresie URL + może zostać odczytany jako spacja, a / jako separator ścieżki; w nazwie pliku / w ogóle nie jest dozwolony. Alfabet URL-safe zdefiniowany w RFC 4648 zastępuje je znakami - i _.
Po zaznaczeniu pola URL-safe narzędzie wykonuje tę zamianę i dodatkowo usuwa końcowe dopełnienie = — tak oczekują tego JWT i większość webowych API. Dekoder przyjmuje obie formy: zamienia - i _ z powrotem i automatycznie przywraca brakujące dopełnienie, więc możesz wkleić segment JWT bezpośrednio i odczytać jego JSON. Jeśli ten JSON wyjdzie jako jedna długa linia, formatowanie JSON uczyni go czytelnym.
Kodowanie plików jako data URI
Zakoduj plik… wczytuje plik w przeglądarce i tworzy kompletny data URI, na przykład data:image/png;base64,iVBORw0KGgo…. Typ MIME pochodzi z tego, co przeglądarka zgłasza dla pliku; gdy nie potrafi go określić, używany jest ogólny application/octet-stream. Wynik możesz wkleić do <img src>, do CSS background-image: url(...) albo do reguły @font-face.
Data URI mają sens dla małych zasobów: ikony SVG, obrazka zastępczego o wadze 1–2 KB, logo w podpisie e-mail w HTML. Przy czymkolwiek większym działają na Twoją niekorzyść. Tekst jest o jedną trzecią większy od oryginalnego pliku, nie da się go buforować oddzielnie od strony, która go zawiera, i rozdyma HTML lub CSS, które muszą się załadować, zanim cokolwiek się wyrenderuje. Praktyczny pułap to kilka kilobajtów na zasób.
Cały plik jest wczytywany do pamięci i konwertowany za jednym razem, więc bardzo duże pliki mogą spowolnić kartę lub wyczerpać pamięć. Plik nie jest nigdzie wysyłany.
Gdy dekodowanie się nie udaje
Dekoder pokazuje komunikat „Nieprawidłowy Base64”, gdy dane wejściowe zawierają znaki spoza alfabetu lub mają niemożliwą długość. Najczęstsze przyczyny:
- Prefiks data URI. Przed dekodowaniem usuń wszystko aż do przecinka włącznie w
data:image/png;base64,. - Złamania linii wewnątrz ciągu. Kodery MIME łamią Base64 co 76 znaków. Jeśli dekodowanie zawiedzie na zawiniętym tekście, najpierw połącz go w jedną linię.
- Błędy kopiowania. Brakujący ostatni znak lub zabłąkany cudzysłów z ciągu JSON wystarczą, by wszystko zepsuć.
Dekoder zawsze zamienia wynik na tekst. Jeśli oryginalne dane były plikiem binarnym, takim jak obraz czy archiwum ZIP, wynik będzie wyglądał jak przypadkowe symbole i znaki zapytania; to normalne, bo te bajty nigdy nie były tekstem.