Koder i dekoder Base32hex

Zamień tekst, bajty szesnastkowe lub pliki na Base32 z rozszerzonym alfabetem szesnastkowym i z powrotem. Ustaw dopełnienie i wielkość liter, na przykład aby uzyskać etykiety w stylu NSEC3.

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

Jak używać

  1. Wybierz „Koduj”, aby zamienić tekst na Base32hex, lub „Dekoduj”, aby zamienić Base32hex z powrotem na tekst.
  2. Pozostaw wybrany wariant Base32hex. Wyłącz „Dopełnienie” lub włącz „Małe litery”, jeśli wymaga tego dany format.
  3. Wpisz lub wklej dane wejściowe albo otwórz plik. Wynik aktualizuje się na bieżąco podczas pisania.
  4. Skopiuj wynik lub pobierz go jako plik.

Czym jest Base32hex?

Base32hex to „Base 32 Encoding with Extended Hex Alphabet”, czyli kodowanie Base32 z rozszerzonym alfabetem szesnastkowym, zdefiniowane w sekcji 7 dokumentu RFC 4648. Działa dokładnie tak jak standardowy Base32: każdy znak niesie 5 bitów, każde 5 bajtów daje 8 znaków, a wynik jest dopełniany znakami = do wielokrotności 8. Różni się tylko alfabet. Zamiast A-Z 2-7 Base32hex kontynuuje liczenie tam, gdzie kończy się system szesnastkowy: cyfry od 0 do 9 oznaczają wartości od 0 do 9, A to 10, a V to 31.

Ponieważ oba alfabety mają większość znaków wspólnych, ciąg Base32hex często da się podać standardowemu dekoderowi Base32 bez żadnego błędu, ale otrzymane bajty będą nieprawidłowe. Zawsze dekoduj tym samym wariantem, którego użyto do kodowania.

Kolejność sortowania zostaje zachowana

Alfabet jest ułożony w rosnącej kolejności ASCII, a wartość każdego znaku rośnie wraz z jego pozycją. W rezultacie porównywanie dwóch ciągów Base32hex znak po znaku daje tę samą kolejność co porównywanie bajtów, które kodują. RFC 4648 wskazuje to jako właściwość, której brakuje standardowemu Base32 i Base64. Dzięki niej Base32hex dobrze sprawdza się jako format kluczy w posortowanych magazynach danych, takich jak bazy danych i magazyny klucz-wartość.

Zapisuj wszystkie ciągi literami tej samej wielkości i wyłącz dopełnienie, gdy dane wejściowe mają różną długość: znak = sortuje się między cyframi a literami i może zaburzyć kolejność.

Base32hex w rekordach DNSSEC NSEC3

Rekordy NSEC3, zdefiniowane w RFC 5155, dowodzą, że dana nazwa DNS nie istnieje, a jednocześnie utrudniają wyliczenie wszystkich nazw w strefie. Każda nazwa jest haszowana algorytmem SHA-1, a 20-bajtowy skrót jest zapisywany jako 32-znakowa etykieta Base32hex bez dopełnienia, zwykle wyświetlana małymi literami. Ponieważ kodowanie zachowuje kolejność skrótów, zahaszowane nazwy tworzą posortowany łańcuch. Aby zamienić skrót na taką etykietę, wklej go jako dane wejściowe w hex, wyłącz „Dopełnienie” i wybierz „Małe litery”. To narzędzie wykonuje tylko krok kodowania; nie oblicza solonego, wielokrotnie iterowanego skrótu NSEC3.

Base32hex w kodzie

# Python 3.10+
import base64
base64.b32hexencode(b'foobar')          # b'CPNMUOJ1E8======'
base64.b32hexdecode('CPNMUOJ1E8======') # b'foobar'

// Go (import "encoding/base32")
base32.HexEncoding.EncodeToString(data)
base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(data)

Specyfikacja

Alfabet0-9 A-V
Rozmiar wyniku8 znaków na 5 bajtów (160%)
Dopełnienie= do wielokrotności 8 znaków
StandardRFC 4648, sekcja 7
Rozróżnia wielkość literNie

Przykłady

Wejście (UTF-8)Wyjście
Hello, World!91IMOR3F5GG5ERRIDHI22===
Base64.is89GN6P9M6GN6ISO=
你好SIUQ1PD5NK======

Najczęściej zadawane pytania

Czym różni się Base32 od Base32hex?
Oba używają 5 bitów na znak i tych samych zasad dopełniania. Standardowy Base32 używa alfabetu A-Z 2-7, a Base32hex alfabetu 0-9 A-V, który zachowuje kolejność sortowania danych. Nie można ich stosować zamiennie.
Czy Base32hex rozróżnia wielkość liter?

Alfabet jest zdefiniowany wielkimi literami, ale ten dekoder akceptuje również dane wejściowe zapisane małymi literami. Jeśli potrzebny jest wynik małymi literami, na przykład dla etykiet DNS, włącz opcję „Małe litery”.

Czy używać dopełnienia?
RFC 4648 dopełnia wynik znakami = do wielokrotności 8 znaków, ale wiele formatów, w tym NSEC3, je pomija. Dekoder akceptuje obie formy, więc wybierz to, czego oczekuje system odbiorcy.
Czy ciąg Base32hex to to samo co zapis szesnastkowy?
Nie. Ciąg Base32hex, który akurat zawiera tylko znaki 0-9 i A-F, wygląda jak hex, ale każdy znak niesie 5 bitów zamiast 4. Do pracy ze zwykłym zapisem szesnastkowym użyj narzędzia Base16.