Base45-Encoder und -Decoder

Wandeln Sie Text, Hex-Bytes oder Dateien in Base45 um und zurück. Base45 nutzt die 45 Zeichen des alphanumerischen QR-Code-Modus, sodass Binärdaten mit wenig Mehraufwand in QR-Codes passen.

Läuft vollständig in Ihrem Browser. Es wird nichts hochgeladen.

Anleitung

  1. Wählen Sie „Kodieren“, um Text in Base45 umzuwandeln, oder „Dekodieren“, um Base45 wieder in Text oder Bytes umzuwandeln.
  2. Geben Sie die Eingabe ein, fügen Sie sie ein oder klicken Sie auf „Datei öffnen“. Behalten Sie alle Leerzeichen bei: Sie gehören zum Alphabet.
  3. Stellen Sie beim Dekodieren von Binärdaten wie den Nutzdaten eines Zertifikats die Ausgabe auf Hex um.
  4. Kopieren Sie das Ergebnis oder laden Sie es als Datei herunter.

Was ist Base45?

Base45 ist in RFC 9285 definiert. Sein Alphabet besteht aus den Ziffern 0-9, den Großbuchstaben A-Z und neun Symbolen: dem Leerzeichen und $ % * + - . / :. Das sind genau die 45 Zeichen, die ein QR-Code in seinem kompakten alphanumerischen Modus speichern kann. Beachten Sie, dass das Leerzeichen ein echtes Zeichen des Alphabets ist und kein Trennzeichen.

Der Encoder verarbeitet die Eingabe in Paaren von zwei Bytes, liest jedes Paar als Zahl von 0 bis 65535 und schreibt diese Zahl als drei Base45-Ziffern, die niederwertigste Ziffer zuerst. Ein einzelnes letztes Byte wird zu zwei Zeichen. Als Text ist das Ergebnis 1,5-mal so groß wie die Eingabe und damit größer als bei Base64.

Warum Base45 gut zu QR-Codes passt

Im alphanumerischen Modus packt ein QR-Code zwei Zeichen in 11 Bit. Base64 kann diesen Modus nicht nutzen, weil es Kleinbuchstaben braucht. Es muss daher auf den Byte-Modus mit 8 Bit pro Zeichen ausweichen, was rund 10,7 Bit pro Datenbyte ergibt. Base45 braucht im alphanumerischen Modus nur 8,25 Bit pro Byte, sodass dieselben Daten in einen kleineren QR-Code passen, der sich leichter scannen lässt.

Behalten Sie beim Dekodieren die Leerzeichen genau so bei, wie sie sind; nur Zeilenumbrüche werden ignoriert. Kleinbuchstaben gehören nicht zum Alphabet und werden als ungültig gemeldet.

Digitale COVID-Zertifikate der EU dekodieren

Die QR-Codes der digitalen COVID-Zertifikate der EU enthalten Text, der mit HC1: beginnt. Der Rest ist Base45: Die Zertifikatsdaten sind als CBOR kodiert, mit COSE signiert, mit zlib komprimiert und anschließend Base45-kodiert. So sehen Sie hinein:

  1. Entfernen Sie das Präfix HC1:. Seine vier Zeichen sind gültiges Base45; wenn Sie sie stehen lassen, entstehen falsche Bytes.
  2. Dekodieren Sie den Rest hier mit Hex-Ausgabe. zlib-Daten beginnen meist mit dem Byte 78.
  3. Dekomprimieren Sie die Bytes mit zlib und analysieren Sie das CBOR mit einem anderen Tool.

Dieses Tool übernimmt nur den Base45-Schritt. Es dekomprimiert die Daten nicht, analysiert sie nicht und prüft auch die Signatur nicht.

Base45 im Programmcode

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

Spezifikation

Alphabet0-9 A-Z Leerzeichen $ % * + - . / :
Ausgabegröße3 Zeichen pro 2 Bytes (150 %)
AuffüllungKeine
StandardRFC 9285
Groß-/Kleinschreibung relevantJa

Beispiele

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

Häufig gestellte Fragen

Warum enthält die Base45-Ausgabe Leerzeichen?

Das Leerzeichen ist eines der 45 Zeichen des Alphabets und trägt daher Daten. Entfernen Sie in Base45-Text keine Leerzeichen und fassen Sie sie nicht zusammen, sonst schlägt die Dekodierung fehl oder liefert falsche Bytes.

Wie dekodiere ich einen HC1:-String?

Entfernen Sie das Präfix HC1:, dekodieren Sie den Rest mit Hex-Ausgabe, dekomprimieren Sie das Ergebnis dann mit zlib und lesen Sie die CBOR-Daten mit einem separaten Tool. Dieses Tool führt nur den Base45-Schritt aus.

Unterscheidet Base45 zwischen Groß- und Kleinschreibung?

Ja. Nur Großbuchstaben gehören zum Alphabet, weil der alphanumerische QR-Modus keine Kleinbuchstaben kennt. Eingaben in Kleinbuchstaben werden zusammen mit ihrer Position als ungültig gemeldet.

Ist Base45 kompakter als Base64?

Als reiner Text nicht: Base45 ist 1,5-mal so groß wie die Eingabe, Base64 etwa 1,33-mal. In einem QR-Code dagegen schon, weil Base45 den dichteren alphanumerischen Modus nutzen kann.