Base45-koder og -dekoder

Konvertér tekst, hexbytes eller filer til Base45 og tilbage. Base45 bruger de 45 tegn i QR-kodens alfanumeriske tilstand, så binære data kan lægges i QR-koder med lidt overhead.

Kører udelukkende i din browser. Intet bliver uploadet.

Sådan bruger du værktøjet

  1. Vælg Kod for at gøre tekst til Base45, eller Afkod for at gøre Base45 til tekst eller bytes igen.
  2. Skriv eller indsæt dit input, eller åbn en fil. Behold alle mellemrum: De er en del af alfabetet.
  3. Når du afkoder binære data som indholdet af et certifikat, så skift outputtet til Hex.
  4. Kopiér resultatet, eller download det som en fil.

Hvad er Base45?

Base45 er defineret i RFC 9285. Alfabetet består af cifrene 0-9, de store bogstaver A-Z og ni symboler: mellemrum og $ % * + - . / :. Det er præcis de 45 tegn, en QR-kode kan gemme i sin kompakte alfanumeriske tilstand. Bemærk, at mellemrummet er et rigtigt tegn i alfabetet og ikke et skilletegn.

Koderen tager inputtet to bytes ad gangen, læser dem som et tal fra 0 til 65535 og skriver tallet som tre Base45-cifre med det mindst betydende ciffer først. En enkelt byte til sidst bliver til to tegn. Som tekst er resultatet 1,5 gange så stort som inputtet, altså større end med Base64.

Hvorfor Base45 passer til QR-koder

I alfanumerisk tilstand pakker en QR-kode to tegn i 11 bit. Base64 kan ikke bruge den tilstand, fordi den kræver små bogstaver, så den må falde tilbage til bytetilstand med 8 bit pr. tegn, omkring 10,7 bit for hver databyte. Base45 kræver kun 8,25 bit pr. byte i alfanumerisk tilstand, så de samme data kan være i en mindre QR-kode, der er lettere at scanne.

Ved afkodning skal du bevare mellemrummene præcis, som de er; kun linjeskift ignoreres. Små bogstaver er ikke en del af alfabetet og rapporteres som ugyldige.

Afkodning af EU's digitale covidcertifikater

QR-koderne i EU's digitale covidcertifikater indeholder tekst, der begynder med HC1:. Resten er Base45: Certifikatdataene er kodet som CBOR, signeret med COSE, komprimeret med zlib og derefter Base45-kodet. Sådan ser du indholdet:

  1. Fjern præfikset HC1:. Dets fire tegn er gyldig Base45, så hvis du lader dem stå, får du forkerte bytes.
  2. Afkod resten her med Hex valgt under Output som. zlib-data begynder som regel med byten 78.
  3. Dekomprimér bytene med zlib, og fortolk CBOR-dataene med et andet værktøj.

Dette værktøj håndterer kun Base45-trinnet. Det hverken dekomprimerer dataene, fortolker dem eller verificerer signaturen.

Base45 i kode

# Python (pip install base45)
import base45
base45.b45encode(b'AB')     # eksempel fra RFC 9285: BB8
base45.b45decode('BB8')     # b'AB'

Specifikation

Alfabet0-9 A-Z mellemrum $ % * + - . / :
Outputstørrelse3 tegn pr. 2 bytes (150 %)
UdfyldningIngen
StandardRFC 9285
Skelner mellem store og små bogstaverJa

Eksempler

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

Ofte stillede spørgsmål

Hvorfor indeholder Base45-output mellemrum?

Mellemrummet er et af alfabetets 45 tegn, så det bærer data. Fjern eller sammentræk ikke mellemrum i Base45-tekst, ellers mislykkes afkodningen eller giver forkerte bytes.

Hvordan afkoder jeg en HC1:-streng?

Fjern præfikset HC1:, afkod resten med Hex valgt under Output som, dekomprimér derefter resultatet med zlib, og læs CBOR-dataene med et separat værktøj. Dette værktøj udfører kun Base45-trinnet.

Skelner Base45 mellem store og små bogstaver?

Ja. Kun store bogstaver hører til alfabetet, fordi QR-kodens alfanumeriske tilstand ikke har små bogstaver. Input med små bogstaver rapporteres som ugyldigt sammen med dets position.

Er Base45 mere kompakt end Base64?

Som almindelig tekst nej: Base45 er 1,5 gange inputtets størrelse og Base64 omkring 1,33 gange. I en QR-kode ja, fordi Base45 kan bruge den tættere alfanumeriske tilstand.