Koder i dekoder Base45

Zamień tekst, bajty szesnastkowe lub pliki na Base45 i z powrotem. Base45 używa 45 znaków trybu alfanumerycznego kodów QR, dzięki czemu dane binarne mieszczą się w kodach QR przy niewielkim narzucie.

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

Jak używać

  1. Wybierz „Koduj”, aby zamienić tekst na Base45, lub „Dekoduj”, aby zamienić Base45 z powrotem na tekst lub bajty.
  2. Wpisz lub wklej dane wejściowe albo otwórz plik. Zachowaj wszystkie spacje: są częścią alfabetu.
  3. Podczas dekodowania danych binarnych, takich jak zawartość zaświadczenia, ustaw „Wyjście jako” na „Hex”.
  4. Skopiuj wynik lub pobierz go jako plik.

Czym jest Base45?

Base45 zdefiniowano w RFC 9285. Jego alfabet tworzą cyfry 0-9, wielkie litery A-Z i dziewięć symboli: spacja oraz $ % * + - . / :. To dokładnie te 45 znaków, które kod QR może przechowywać w zwartym trybie alfanumerycznym. Warto pamiętać, że spacja jest pełnoprawnym znakiem alfabetu, a nie separatorem.

Koder pobiera dane wejściowe po dwa bajty, odczytuje je jako liczbę od 0 do 65535 i zapisuje tę liczbę jako trzy cyfry Base45, zaczynając od najmniej znaczącej. Ostatni pojedynczy bajt staje się dwoma znakami. Jako tekst wynik jest 1,5 raza większy niż dane wejściowe, czyli większy niż w Base64.

Dlaczego Base45 pasuje do kodów QR

W trybie alfanumerycznym kod QR mieści dwa znaki w 11 bitach. Base64 nie może korzystać z tego trybu, ponieważ wymaga małych liter, więc musi używać trybu bajtowego z 8 bitami na znak, co daje około 10,7 bitu na każdy bajt danych. Base45 w trybie alfanumerycznym potrzebuje tylko 8,25 bitu na bajt, więc te same dane mieszczą się w mniejszym kodzie QR, który łatwiej zeskanować.

Podczas dekodowania zachowaj spacje dokładnie w takiej postaci, w jakiej są; ignorowane są tylko podziały wierszy. Małe litery nie należą do alfabetu i są zgłaszane jako nieprawidłowe.

Dekodowanie unijnych cyfrowych zaświadczeń COVID

Kody QR unijnych cyfrowych zaświadczeń COVID (EU Digital COVID Certificate) zawierają tekst zaczynający się od HC1:. Reszta to Base45: dane zaświadczenia są zakodowane w CBOR, podpisane za pomocą COSE, skompresowane algorytmem zlib, a na końcu zakodowane w Base45. Aby zajrzeć do środka:

  1. Usuń prefiks HC1:. Jego cztery znaki są prawidłowymi znakami Base45, więc pozostawienie ich daje nieprawidłowe bajty.
  2. Zdekoduj resztę tutaj z opcją „Wyjście jako” ustawioną na „Hex”. Dane zlib zwykle zaczynają się od bajtu 78.
  3. Zdekompresuj bajty za pomocą zlib i przeanalizuj dane CBOR w innym narzędziu.

To narzędzie wykonuje tylko krok Base45. Nie dekompresuje danych, nie analizuje ich ani nie weryfikuje podpisu.

Base45 w kodzie

# Python (pip install base45)
import base45
base45.b45encode(b'AB')     # przykład z RFC 9285: BB8
base45.b45decode('BB8')     # b'AB'

Specyfikacja

Alfabet0-9 A-Z spacja $ % * + - . / :
Rozmiar wyniku3 znaki na 2 bajty (150%)
DopełnienieBrak
StandardRFC 9285
Rozróżnia wielkość literTak

Przykłady

Wejście (UTF-8)Wyjście
Hello, World!%69 VDK2E:3404ESVDX0
Base64.isSH8LQEG%61*5P2
你好C-SEFK*.K

Najczęściej zadawane pytania

Dlaczego wynik Base45 zawiera spacje?

Spacja jest jednym z 45 znaków alfabetu, więc niesie dane. Nie usuwaj ani nie scalaj spacji w tekście Base45, bo dekodowanie się nie powiedzie albo da nieprawidłowe bajty.

Jak zdekodować ciąg HC1:?

Usuń prefiks HC1:, zdekoduj resztę z opcją „Wyjście jako” ustawioną na „Hex”, a następnie zdekompresuj wynik za pomocą zlib i odczytaj dane CBOR w osobnym narzędziu. To narzędzie wykonuje tylko krok Base45.

Czy Base45 rozróżnia wielkość liter?

Tak. Do alfabetu należą tylko wielkie litery, ponieważ tryb alfanumeryczny kodów QR nie obsługuje małych. Dane wejściowe zapisane małymi literami są zgłaszane jako nieprawidłowe wraz z pozycją.

Czy Base45 jest bardziej zwarty niż Base64?

Jako zwykły tekst nie: Base45 ma 1,5 raza większy rozmiar niż dane wejściowe, a Base64 około 1,33 raza. Wewnątrz kodu QR tak, ponieważ Base45 może korzystać z gęstszego trybu alfanumerycznego.