Base64
Wpisz lub wklej tekst, a zostanie zakodowany lub zdekodowany na bieżąco.
0 zn. · 0 B
Wynik
Jak to działa
Base64 zapisuje dowolne bajty za pomocą 64 znaków, które bez szwanku przechodzą przez systemy zbudowane dla tekstu, takie jak poczta elektroniczna i adresy internetowe.
Trzy bajty stają się czterema znakami, więc wynik jest o około jedną trzecią dłuższy od oryginału. Znaki równości na końcu to dopełnienie (padding), używane, gdy liczba bajtów nie dzieli się przez trzy.
Base64 to kodowanie, a nie szyfrowanie. Każdy może je zdekodować, więc niczego nie chroni. Używaj go do przesyłania danych, nigdy do ich ukrywania.
Tekst jest kodowany w UTF-8 przed konwersją, dlatego polskie znaki i emoji działają poprawnie. Wbudowana funkcja przeglądarki sama obsługuje tylko znaki o kodach poniżej 256.
Wariant bezpieczny dla URL zastępuje plus łącznikiem, a ukośnik podkreśleniem. Dekodowanie przyjmuje tu oba warianty, z dopełnieniem lub bez.
Jak działa narzędzie
Przy kodowaniu narzędzie najpierw zamienia tekst na bajty UTF-8, a potem funkcja przeglądarki btoa zapisuje je w Base64. Przy dekodowaniu usuwa wszystkie białe znaki, także znaki nowego wiersza w środku tekstu, zamienia łączniki i podkreślenia z powrotem na plus i ukośnik oraz dopisuje znaki równości, aż długość będzie podzielna przez cztery. Potem dekoduje funkcja atob, a bajty są odczytywane jako UTF-8 w trybie ścisłym: bajty, które nie tworzą poprawnego UTF-8, dają komunikat o błędzie zamiast znaków zastępczych. Pod polem widać i znaki, i bajty. Znaki są liczone tak, jak widzi je czytelnik, więc emoji z odcieniem skóry to jeden znak, ale osiem bajtów w UTF-8, a długość wyniku zależy od bajtów.
Przykład
Hą to w UTF-8 trzy bajty: 48 dla H oraz C4 85 dla ą. Ich 24 bity dzielą się na cztery grupy po sześć: 010010, 001100, 010010 i 000101, czyli 18, 12, 18 i 5. W alfabecie Base64, w którym A–Z to 0–25, a a–z to 26–51, są to S, M, S i F. Wynik to SMSF, bez dopełnienia, bo trzy bajty mieszczą się dokładnie w czterech znakach.
Hej! to cztery bajty i daje SGVqIQ==. Czwarty bajt wypełnia tylko dwa znaki nowej czwórki, a dwa znaki równości ją dopełniają.
Przypadki graniczne
Narzędzie pracuje na tekście. Base64 z danymi binarnymi, np. obrazem albo skompresowanym plikiem, przy dekodowaniu z reguły daje komunikat o błędzie, bo bajty nie są poprawnym UTF-8.
Base64 w poczcie elektronicznej jest dzielone na wiersze: RFC 2045 dopuszcza najwyżej 76 znaków w wierszu i mówi, że przy dekodowaniu znaki nowego wiersza należy pomijać. Narzędzie najpierw usuwa wszystkie białe znaki, więc zakodowaną część tekstową wiadomości możesz wkleić bez zmian.
Ciąg, którego długość przy dzieleniu przez cztery daje resztę 1, nigdy nie jest poprawny. Pojedynczy ostatni znak niesie tylko sześć bitów, za mało na cały bajt, więc algorytm ze standardu WHATWG Infra, który stosuje atob, odrzuca takie dane. SGVqI, czyli SGVqIQ== bez trzech ostatnich znaków, daje komunikat o błędzie, a SGVqIQ bez znaków równości dekoduje się do Hej!.