Kategoria: Programistyczne

Kodowanie i dekodowanie Base64

Koduj tekst do Base64 i dekoduj go z powrotem.

Działa w przeglądarcePrzetwarzanie lokalne. Dane wejściowe nie opuszczają Twojego urządzenia.

Używa znaków - i _ oraz pomija dopełnienie.

Szczegóły

O tym narzędziu

Koduje tekst do Base64 i dekoduje go z powrotem, w alfabecie standardowym i w wariancie URL-safe. Dekodowanie przyjmuje oba warianty niezależnie od przełącznika, a przedrostek adresu data: jest usuwany za Ciebie.

Base64 istnieje, bo spora część internetu powstała z myślą o przenoszeniu tekstu i niczego więcej. Nagłówki poczty, pola tekstowe w JSON-ie, atrybuty XML, nagłówki HTTP i ciasteczka spodziewają się znaków drukowalnych, a surowe bajty przechodzące przez nie ulegają zniekształceniu - wystarczy przypadkowy znak nowej linii albo bajt powyżej 127 i wiadomość jest uszkodzona. Base64 rozwiązuje to, zapisując trzy bajty jako cztery znaki z 64-znakowego alfabetu, który przetrwa wszystko. Cena jest stała i znana: wynik jest o jedną trzecią większy od wejścia.

Wariant URL-safe podmienia dwa znaki, które sprawiają kłopot w adresie WWW. Standardowy Base64 używa + i /, a te w zapytaniu znaczą co innego, więc alfabet URL-safe stosuje zamiast nich - i _ oraz porzuca dopełnienie znakiem =, bo jego też trzeba by escapować. Tokeny JWT używają tego wariantu w całości i dlatego części tokenu dekodują się tutaj, a w ścisłym dekoderze standardowego alfabetu nie.

UTF-8 to miejsce, w którym naiwne implementacje się wykładają. Wbudowana w przeglądarkę funkcja btoa rzuca wyjątkiem na dowolnym znaku powyżej U+00FF, więc „café” się nie uda, a emoji jest niemożliwe; jedyna poprawna droga prowadzi przez zamianę tekstu na bajty UTF-8 i zakodowanie ich. To narzędzie robi tak zawsze i dlatego polski albo japoński napis wraca bez zmian. Wszystko liczy się w przeglądarce, a to ma znaczenie, bo w Base64 opakowuje się zwykle tokeny, poświadczenia i ładunki API.

Wypróbuj też

  • Formatuj, wcinaj i porządkuj JSON.

    Działa w przeglądarceProgramistyczne
  • Podejrzyj nagłówek i dane tokenu JSON Web Token.

    Działa w przeglądarceProgramistyczne
  • Generuj kryptograficznie losowe identyfikatory UUID w wersji 4.

    Działa w przeglądarceProgramistyczne

Warto wiedzieć

Najczęstsze pytania

Czy Base64 jest szyfrowaniem?
Nie, i traktowanie go jak szyfrowania to realny błąd bezpieczeństwa, a nie czepianie się słówek. Base64 to sposób kodowania: nie ma tu klucza, a odkodować może każdy jednym ruchem. Nic nie ukrywa. Jego zadaniem jest przeprowadzenie dowolnych bajtów przez kanał, który przyjmuje wyłącznie tekst - nie ich ochrona.
Co oznacza Base64 URL-safe?
To samo kodowanie z dwoma podmienionymi znakami i bez dopełnienia: - i _ zastępują + i /, a końcowe znaki = znikają. Oba podmienione znaki mają w adresie URL własne znaczenie, a = trzeba by zakodować procentowo, więc standardowy alfabet nie przeszedłby przez zapytanie bez escapowania. Tokeny JWT używają wariantu URL-safe wszędzie.
Dlaczego mój tekst z ogonkami albo emoji gdzieś się popsuł?
Bo koder pominął krok UTF-8. Funkcja btoa w JavaScripcie działa na napisie binarnym i rzuca wyjątkiem na wszystkim powyżej U+00FF, więc „café” po prostu się nie uda, a emoji nie da się w ogóle zapisać. Tekst musi najpierw stać się bajtami UTF-8. To narzędzie tak robi, więc cokolwiek wkleisz, wróci dokładnie takie samo.
Dlaczego Base64 jest dłuższy od oryginału?
Bo na każde trzy bajty przypadają cztery znaki, więc wynik jest większy o mniej więcej 33 procent, plus dopełnienie. Ten narzut jest powodem, dla którego osadzanie obrazów jako adresów data: obciąża stronę bardziej niż podlinkowanie tych samych plików, i dlatego Base64 jest opakowaniem transportowym, a nie kompresją.
Czy mogę odkodować adres data:?
Tak. Przedrostek data:image/png;base64, jest rozpoznawany i usuwany, więc możesz wkleić cały adres data ze stylów albo atrybutu HTML bez wcześniejszego przycinania. Białe znaki i łamania linii też są ignorowane - dzięki temu działa wklejanie z nagłówka wiadomości.