Koder i dekoder Crockford Base32

Zamień tekst, bajty szesnastkowe lub pliki na Base32 Douglasa Crockforda i z powrotem. Dekoder wybacza pomyłki przy wpisywaniu: ignoruje wielkość liter i łączniki, a O odczytuje jako 0, zaś I lub L jako 1.

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

Jak używać

  1. Wybierz „Koduj”, aby zamienić tekst na Crockford Base32, lub „Dekoduj”, aby zamienić go z powrotem na tekst.
  2. Pozostaw wybrany wariant Crockford i upewnij się, że „Dopełnienie” jest wyłączone. Aby uzyskać wynik małymi literami, włącz „Małe litery”.
  3. Wpisz lub wklej dane wejściowe albo otwórz plik. Podczas dekodowania łączniki i spacje są ignorowane.
  4. Skopiuj wynik lub pobierz go jako plik.

Czym jest Crockford Base32?

Douglas Crockford zaprojektował ten alfabet Base32 z myślą o identyfikatorach, które ludzie czytają, wpisują i wypowiadają na głos. Składa się z dziesięciu cyfr i 22 wielkich liter: 0123456789ABCDEFGHJKMNPQRSTVWXYZ. Litery I i L pominięto, ponieważ przypominają cyfrę 1, literę O, ponieważ przypomina 0, a literę U, aby zmniejszyć ryzyko przypadkowego utworzenia obscenicznych słów.

Każdy symbol niesie 5 bitów, więc 5 bajtów daje 8 znaków, tak samo jak w Base32 według RFC 4648. Symbole są ułożone w rosnącej kolejności ASCII, więc ciągi bez dopełnienia zapisane literami tej samej wielkości sortują się w tej samej kolejności co kodowane dane. Specyfikacja Crockforda nie przewiduje dopełnienia, dlatego opcja „Dopełnienie” powinna pozostać wyłączona.

Wyrozumiałe dekodowanie

Specyfikacja Crockforda wymaga, aby dekodery akceptowały to, co ludzie faktycznie wpisują, i to narzędzie tak właśnie działa:

  • Wielkie i małe litery są traktowane tak samo.
  • Litera O jest odczytywana jako cyfra 0, a litery I i L jako 1.
  • Łączniki, które można wstawiać, aby długie kody były łatwiejsze do odczytania, są ignorowane, podobnie jak spacje i podziały wierszy.

Litera U jest nieprawidłowa i zostaje zgłoszona wraz z jej pozycją.

Bajty, liczby i ULID

Crockford opisuje swoje kodowanie w kategoriach liczb, natomiast to narzędzie koduje ciąg bajtów w 5-bitowych grupach, tak jak w RFC 4648, używając symboli Crockforda. Gdy liczba bitów nie jest wielokrotnością 5, implementacje oparte na liczbach umieszczają nadmiarowe bity zerowe na początku, a to narzędzie na końcu, więc wyniki mogą się różnić.

Typowym przykładem jest ULID. Używa alfabetu Crockforda, ale koduje swoją 128-bitową wartość jako liczbę w 26 znakach, więc 16 bajtów identyfikatora ULID nie daje tutaj tego samego ciągu, a zdekodowanie ULID zwraca bajty przesunięte o dwa bity. Opcjonalny symbol kontrolny ze specyfikacji Crockforda, czyli dodatkowy znak z wartością modulo 37, nie jest obsługiwany: to narzędzie ani go nie dodaje, ani nie weryfikuje.

Specyfikacja

Alfabet0-9 A-Z bez I L O U
Rozmiar wyniku8 znaków na 5 bajtów (160%)
DopełnienieBrak
StandardCrockford Base32 (2002)
Rozróżnia wielkość literNie

Przykłady

Wejście (UTF-8)Wyjście
Hello, World!91JPRV3F5GG5EVVJDHJ22
Base64.is89GQ6S9P6GQ6JWR
你好WJYT1SD5QM

Najczęściej zadawane pytania

Czy Crockford Base32 rozróżnia wielkość liter?

Nie. Wynik jest domyślnie zapisywany wielkimi literami, a opcja „Małe litery” przełącza go na małe. Dekoder akceptuje obie formy, nawet wymieszane w jednym ciągu.

Dlaczego w alfabecie brakuje liter I, L, O i U?

I i L łatwo pomylić z 1, a O z 0, dlatego zostały pominięte i podczas dekodowania są odczytywane jako te cyfry. U wykluczono, aby losowe kody rzadziej układały się w obraźliwe słowa angielskie.

Czy to narzędzie obsługuje symbol kontrolny Crockforda?
Nie. Specyfikacja dopuszcza opcjonalny dodatkowy znak z sumą kontrolną modulo 37, który korzysta z dodatkowych symboli * ~ $ = U. To narzędzie go nie dodaje ani nie weryfikuje, więc przed dekodowaniem usuń symbol kontrolny.
Czy można tu zdekodować ULID?

Nie do dokładnie tych samych 16 bajtów. ULID koduje swoje 128 bitów jako jedną liczbę z nadmiarowymi bitami na początku, natomiast to narzędzie pracuje na grupach bajtów i umieszcza je na końcu. Aby odczytać znacznik czasu i część losową, użyj biblioteki do obsługi ULID.