Så använder du verktyget
- Välj Koda för att göra om text till Base45, eller Avkoda för att göra om Base45 till text eller byte.
- Skriv eller klistra in indatan, eller öppna en fil. Behåll alla mellanslag: de ingår i alfabetet.
- Välj Hex under Utdata som när du avkodar binärdata, till exempel nyttolasten i ett intyg.
- Kopiera resultatet eller ladda ned det som en fil.
Vad är Base45?
Base45 definieras i RFC 9285. Alfabetet består av siffrorna 0-9, versalerna A-Z och nio symboler: mellanslag och $ % * + - . / :. Det är exakt de 45 tecken som en QR-kod kan lagra i sitt kompakta alfanumeriska läge. Observera att mellanslaget är ett riktigt tecken i alfabetet och inte en avgränsare.
Kodaren tar indatan två byte åt gången, läser dem som ett tal från 0 till 65535 och skriver talet som tre Base45-siffror, med den minst signifikanta siffran först. En ensam byte på slutet blir två tecken. Som text blir resultatet 1,5 gånger så stort som indatan, alltså större än Base64.
Därför passar Base45 för QR-koder
I alfanumeriskt läge packar en QR-kod två tecken i 11 bitar. Base64 kan inte använda det läget eftersom det kräver gemener, så det faller tillbaka på byteläge med 8 bitar per tecken, ungefär 10,7 bitar för varje byte data. Base45 behöver bara 8,25 bitar per byte i alfanumeriskt läge, så samma data får plats i en mindre QR-kod som är lättare att skanna.
Behåll mellanslagen exakt som de är vid avkodning; bara radbrytningar ignoreras. Gemener ingår inte i alfabetet och rapporteras som ogiltiga.
Avkoda EU:s digitala covidintyg
QR-koderna i EU:s digitala covidintyg innehåller text som börjar med HC1:. Resten är Base45: intygsdatan kodas som CBOR, signeras med COSE, komprimeras med zlib och kodas sedan med Base45. Så här tittar du på innehållet:
- Ta bort prefixet
HC1:. Dess fyra tecken är giltig Base45, så om du låter dem vara kvar blir bytena fel. - Avkoda resten här med Hex som utdata. zlib-data börjar oftast med byten
78. - Dekomprimera bytena med zlib och tolka CBOR-datan med ett annat verktyg.
Det här verktyget hanterar bara Base45-steget. Det dekomprimerar inte datan, tolkar den inte och verifierar inte signaturen.
Base45 i programkod
# Python (pip install base45)
import base45
base45.b45encode(b'AB') # exempel från RFC 9285: BB8
base45.b45decode('BB8') # b'AB'
Specifikation
| Alfabet | 0-9 A-Z mellanslag $ % * + - . / : |
|---|---|
| Utdatastorlek | 3 tecken per 2 byte (150 %) |
| Utfyllnad | Ingen |
| Standard | RFC 9285 |
| Skiftlägeskänslig | Ja |
Exempel
| Indata (UTF-8) | Utdata |
|---|---|
Hello, World! | %69 VDK2E:3404ESVDX0 |
Base64.is | SH8LQEG%61*5P2 |
你好 | C-SEFK*.K |
Vanliga frågor
Varför innehåller Base45-utdata mellanslag?
Mellanslaget är ett av alfabetets 45 tecken, så det bär data. Ta inte bort eller slå ihop mellanslag i Base45-text, annars misslyckas avkodningen eller ger fel byte.
Hur avkodar jag en HC1:-sträng?
Ta bort prefixet HC1:, avkoda resten med Hex som utdata, dekomprimera sedan resultatet med zlib och läs CBOR-datan med ett separat verktyg. Det här verktyget utför bara Base45-steget.
Är Base45 skiftlägeskänslig?
Ja. Bara versaler ingår i alfabetet, eftersom QR-kodens alfanumeriska läge saknar gemener. Indata med gemener rapporteras som ogiltig, tillsammans med sin position.
Är Base45 mer kompakt än Base64?
Som vanlig text, nej: Base45 är 1,5 gånger indatans storlek och Base64 ungefär 1,33 gånger. Inuti en QR-kod, ja, eftersom Base45 kan använda det tätare alfanumeriska läget.