Zo gebruik je het
- Kies Coderen om tekst om te zetten naar Base45, of Decoderen om Base45 terug te zetten naar tekst of bytes.
- Typ of plak je invoer, of open een bestand. Laat alle spaties staan: ze horen bij het alfabet.
- Zet bij het decoderen van binaire gegevens, zoals de payload van een certificaat, Uitvoer als op Hex.
- Kopieer het resultaat of download het als bestand.
Wat is Base45?
Base45 is gedefinieerd in RFC 9285. Het alfabet bestaat uit de cijfers 0-9, de hoofdletters A-Z en negen symbolen: de spatie en $ % * + - . / :. Dat zijn precies de 45 tekens die een QR-code in zijn compacte alfanumerieke modus kan opslaan. Let op: de spatie is een echt teken van het alfabet en geen scheidingsteken.
De encoder neemt de invoer per twee bytes, leest die als een getal van 0 tot 65535 en schrijft dat getal als drie Base45-cijfers, het minst significante cijfer eerst. Een losse laatste byte wordt twee tekens. Als tekst is het resultaat 1,5 keer zo groot als de invoer, groter dan bij Base64.
Waarom Base45 goed bij QR-codes past
In de alfanumerieke modus verpakt een QR-code twee tekens in 11 bits. Base64 kan die modus niet gebruiken omdat het kleine letters nodig heeft, en valt daarom terug op de bytemodus met 8 bits per teken, ongeveer 10,7 bits voor elke byte aan gegevens. Base45 heeft in de alfanumerieke modus maar 8,25 bits per byte nodig, zodat dezelfde gegevens in een kleinere QR-code passen die makkelijker te scannen is.
Laat bij het decoderen de spaties precies staan zoals ze zijn; alleen regeleinden worden genegeerd. Kleine letters horen niet bij het alfabet en worden als ongeldig gemeld.
EU Digitale COVID-certificaten decoderen
De QR-codes van EU Digitale COVID-certificaten bevatten tekst die begint met HC1:. De rest is Base45: de certificaatgegevens zijn gecodeerd als CBOR, ondertekend met COSE, gecomprimeerd met zlib en daarna met Base45 gecodeerd. Zo kijk je erin:
- Verwijder het voorvoegsel
HC1:. De vier tekens ervan zijn geldige Base45, dus als je ze laat staan, krijg je verkeerde bytes. - Decodeer de rest hier met Uitvoer als op Hex. zlib-gegevens beginnen meestal met de byte
78. - Decomprimeer de bytes met zlib en ontleed de CBOR met een andere tool.
Deze tool verzorgt alleen de Base45-stap. Hij decomprimeert de gegevens niet, ontleedt ze niet en verifieert de handtekening niet.
Base45 in code
# Python (pip install base45)
import base45
base45.b45encode(b'AB') # voorbeeld uit RFC 9285: BB8
base45.b45decode('BB8') # b'AB'
Specificatie
| Alfabet | 0-9 A-Z spatie $ % * + - . / : |
|---|---|
| Uitvoergrootte | 3 tekens per 2 bytes (150%) |
| Opvulling | Geen |
| Standaard | RFC 9285 |
| Hoofdlettergevoelig | Ja |
Voorbeelden
| Invoer (UTF-8) | Uitvoer |
|---|---|
Hello, World! | %69 VDK2E:3404ESVDX0 |
Base64.is | SH8LQEG%61*5P2 |
你好 | C-SEFK*.K |
Veelgestelde vragen
Waarom bevat Base45-uitvoer spaties?
De spatie is een van de 45 tekens van het alfabet en draagt dus gegevens. Verwijder geen spaties uit Base45-tekst en voeg ze ook niet samen, anders mislukt het decoderen of krijg je verkeerde bytes.
Hoe decodeer ik een HC1:-string?
Verwijder het voorvoegsel HC1:, decodeer de rest met Uitvoer als op Hex, decomprimeer het resultaat daarna met zlib en lees de CBOR-gegevens met een aparte tool. Deze tool voert alleen de Base45-stap uit.
Is Base45 hoofdlettergevoelig?
Ja. Alleen hoofdletters horen bij het alfabet, omdat de alfanumerieke modus van QR-codes geen kleine letters kent. Invoer in kleine letters wordt samen met de positie als ongeldig gemeld.
Is Base45 compacter dan Base64?
Als gewone tekst niet: Base45 is 1,5 keer zo groot als de invoer en Base64 ongeveer 1,33 keer. In een QR-code wel, omdat Base45 de compactere alfanumerieke modus kan gebruiken.