Base45-koder og -dekoder

Konverter tekst, hex-byte eller filer til Base45 og tilbake. Base45 bruker de 45 tegnene i den alfanumeriske modusen for QR-koder, så binære data får plass i QR-koder med lite overhead.

Kjører helt i nettleseren din. Ingenting lastes opp.

Slik bruker du verktøyet

  1. Velg Kode for å gjøre tekst om til Base45, eller Dekode for å gjøre Base45 om til tekst eller byte igjen.
  2. Skriv eller lim inn inndataene, eller åpne en fil. Behold alle mellomrom: De er en del av alfabetet.
  3. Når du dekoder binære data, for eksempel nyttelasten i et sertifikat, bytter du utdata til Hex.
  4. Kopier resultatet eller last det ned som en fil.

Hva er Base45?

Base45 er definert i RFC 9285. Alfabetet består av sifrene 0-9, de store bokstavene A-Z og ni symboler: mellomrom og $ % * + - . / :. Dette er nøyaktig de 45 tegnene en QR-kode kan lagre i sin kompakte alfanumeriske modus. Merk at mellomrommet er et ekte tegn i alfabetet, ikke et skilletegn.

Koderen tar inndataene to byte om gangen, leser dem som et tall fra 0 til 65535 og skriver tallet som tre Base45-sifre, med det minst signifikante sifferet først. En enkelt byte til slutt blir to tegn. Som tekst blir resultatet 1,5 ganger så stort som inndataene, altså større enn med Base64.

Hvorfor Base45 passer til QR-koder

I alfanumerisk modus pakker en QR-kode to tegn inn i 11 bit. Base64 kan ikke bruke denne modusen fordi den trenger små bokstaver, så den faller tilbake til bytemodus med 8 bit per tegn, omtrent 10,7 bit for hver byte med data. Base45 trenger bare 8,25 bit per byte i alfanumerisk modus, så de samme dataene får plass i en mindre QR-kode som er lettere å skanne.

Ved dekoding må du beholde mellomrommene nøyaktig som de er; bare linjeskift ignoreres. Små bokstaver hører ikke til alfabetet og rapporteres som ugyldige.

Dekode EUs digitale koronasertifikat

QR-kodene i EUs digitale koronasertifikat inneholder tekst som begynner med HC1:. Resten er Base45: Sertifikatdataene er kodet som CBOR, signert med COSE, komprimert med zlib og deretter Base45-kodet. Slik ser du hva som er inni:

  1. Fjern prefikset HC1:. De fire tegnene er gyldig Base45, så hvis du lar dem stå, får du feil byte.
  2. Dekod resten her med Hex som utdata. zlib-data begynner vanligvis med byten 78.
  3. Dekomprimer bytene med zlib og analyser CBOR-dataene med et annet verktøy.

Dette verktøyet håndterer bare Base45-trinnet. Det verken dekomprimerer dataene, analyserer dem eller verifiserer signaturen.

Base45 i kode

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

Spesifikasjon

Alfabet0-9 A-Z mellomrom $ % * + - . / :
Utdatastørrelse3 tegn per 2 byte (150 %)
UtfyllingIngen
StandardRFC 9285
Skiller store og små bokstaverJa

Eksempler

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

Ofte stilte spørsmål

Hvorfor inneholder Base45-utdata mellomrom?

Mellomrommet er ett av de 45 tegnene i alfabetet, så det bærer data. Ikke fjern eller slå sammen mellomrom i Base45-tekst, ellers mislykkes dekodingen eller gir feil byte.

Hvordan dekoder jeg en HC1:-streng?

Fjern prefikset HC1:, dekod resten med Hex som utdata, dekomprimer deretter resultatet med zlib og les CBOR-dataene med et eget verktøy. Dette verktøyet utfører bare Base45-trinnet.

Skiller Base45 mellom store og små bokstaver?

Ja. Bare store bokstaver hører til alfabetet, fordi den alfanumeriske QR-modusen ikke har små bokstaver. Inndata med små bokstaver rapporteres som ugyldige, sammen med posisjonen.

Er Base45 mer kompakt enn Base64?

Som ren tekst er svaret nei: Base45 er 1,5 ganger størrelsen på inndataene, og Base64 omtrent 1,33 ganger. Inne i en QR-kode er svaret ja, fordi Base45 kan bruke den tettere alfanumeriske modusen.