So kodieren und dekodieren Sie Base45
- Tippen oder fügen Sie Text in Eingabe · Text ein. Die Base45-Zeichenkette erscheint in Ausgabe · Base45 (RFC 9285).
- Für Binärdaten wie komprimierte Bytes stellen Sie Von zuerst auf Hex oder Base64.
- Zum Dekodieren klicken Sie im Richtungsschalter auf Base45 (RFC 9285) → Text und fügen die Zeichenkette ein. Wählen Sie unter Nach Hex oder Base64, wenn das Ergebnis binär ist, was es bei Gesundheitszertifikaten ist.
- Ausgabe kopieren lässt Leerzeichen unverändert. Bytes speichern lädt die dekodierten Bytes als Datei herunter.
So funktioniert Base45
RFC 9285 nimmt die Eingabe in Schritten von zwei Bytes. Jedes Paar ist eine Zahl n von 0 bis 65535, geschrieben als drei Ziffern zur Basis 45, c, d, e, mit n = c + d × 45 + e × 45², die niedrigstwertige zuerst. Ein einzelnes letztes Byte wird zu zwei Ziffern. Das Alphabet ist der alphanumerische QR-Zeichensatz in seiner Reihenfolge:
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:
Die Beispiele aus dem RFC, alle mit diesem Tool nachgerechnet:
| Eingabe | Base45 |
|---|---|
AB | BB8 |
Hello!! | %69 VD92EX0 |
base-45 | UJCLQE7W581 |
ietf! | QED8WEX0 |
Beim Dekodieren werden zwei Dinge geprüft, die ein toleranter Decoder überspringen könnte: Eine Länge von 3n + 1 kann aus keiner Eingabe entstehen, und eine Gruppe über 65535 (etwa GGW oder ZZZ) liegt außerhalb des Wertebereichs. Beides ergibt einen Fehler.
Warum Base45 zu QR-Codes passt
Auf dem Papier wirkt Base45 verschwenderisch: 3 Zeichen pro 2 Bytes sind 50 % Overhead, mehr als die 33 % von Base64. Der Unterschied liegt darin, wie QR-Codes Text speichern. Im alphanumerischen Modus packt ein QR-Code zwei dieser 45 Zeichen in 11 Bit. Drei Base45-Zeichen kosten daher 16,5 Bit für 16 Bit Daten, etwa 3 % Overhead.
Base64 kann den alphanumerischen Modus nicht nutzen, weil es Kleinbuchstaben braucht. Es muss in den Byte-Modus mit 8 Bit pro Zeichen, was im QR-Code 33 % Overhead bedeutet. Für dieselben Daten ist der Base45-QR-Code kleiner oder fasst mehr.
Ein digitales COVID-Zertifikat der EU dekodieren (HC1:)
Der QR-Code des digitalen COVID-Zertifikats der EU enthält eine Zeichenkette, die mit HC1: beginnt. Die Nutzdaten sind in Schichten aufgebaut, und diese Seite übernimmt eine davon:
- Entfernen Sie das Präfix
HC1:.H,C,1und:sind alle gültige Base45-Zeichen, ein stehen gelassenes Präfix wird also als Daten dekodiert und macht alles danach kaputt. - Dekodieren Sie den Rest hier aus Base45, mit Nach auf Base64.
- Entpacken Sie das Ergebnis. Es sind zlib-Daten, die mit dem Byte
78beginnen (eJodereNin Base64). Fügen Sie das Base64 in den gzip- und zlib-Decoder ein. - Parsen Sie das CBOR. Die entpackten Bytes sind eine COSE_Sign1-Struktur in CBOR: ein Header, die Nutzdaten mit den Zertifikatsfeldern und eine Signatur. Dafür braucht man einen CBOR-Decoder, den diese Website nicht hat.
Das Dekodieren zeigt den Inhalt, prüft aber nicht die Signatur. Ob ein Zertifikat echt ist, lässt sich nur mit dem öffentlichen Schlüssel des ausstellenden Landes und einem COSE-Prüfer feststellen.
Base45 in Python
Python hat kein Base45-Modul in der Standardbibliothek. Der Encoder folgt direkt dem RFC:
ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:"
def b45encode(data: bytes) -> str:
out = []
for i in range(0, len(data) - 1, 2):
n = data[i] * 256 + data[i + 1]
c, n = n % 45, n // 45
d, e = n % 45, n // 45
out += ALPHABET[c], ALPHABET[d], ALPHABET[e]
if len(data) % 2:
c, d = data[-1] % 45, data[-1] // 45
out += ALPHABET[c], ALPHABET[d]
return "".join(out)
b45encode(b"ietf!") # 'QED8WEX0'
Das Paket base45 auf PyPI bietet beide Richtungen. Mehr zum Umgang mit Bytes in Python finden Sie auf der Python-Seite.
Häufige Fragen
Warum enthält die Base45-Ausgabe Leerzeichen?
Das Leerzeichen gehört zu den 45 Zeichen des alphanumerischen QR-Zeichensatzes und ist in Base45 daher eine ganz normale Ziffer mit dem Wert 36. Hello!! wird zu %69 VD92EX0. Behalten Sie die Leerzeichen beim Kopieren bei, und lassen Sie sie nicht von einem Formular oder einer Shell abschneiden.
Kann ich hier ein digitales COVID-Zertifikat der EU dekodieren?
Teilweise. Diese Seite erledigt den Base45-Schritt. Danach sind die Daten zlib-komprimiertes CBOR in einer signierten COSE-Struktur, wofür man einen Entpack-Schritt und einen CBOR-Decoder braucht; die Schritte sind auf dieser Seite aufgeführt.
Kann man Base45 bedenkenlos in eine URL setzen?
Nein. Leerzeichen, %, + und / gehören zum Alphabet und haben in URLs alle eine Bedeutung. Prozentkodieren Sie die Zeichenkette oder verwenden Sie für URLs Base64URL.
Warum wird meine Base45-Zeichenkette abgelehnt?
Gültiges Base45 hat eine Länge von 3n oder 3n + 2 Zeichen, und jede Gruppe aus 3 Zeichen darf höchstens 65535 sein. Eine Länge von 3n + 1 oder eine Gruppe wie GGW ist ein Fehler. Ein übrig gebliebenes Präfix HC1: ist eine häufige Ursache.