Encodeur et décodeur Base45

Convertissez du texte, des octets hexadécimaux ou des fichiers en Base45, et inversement. Base45 utilise les 45 caractères du mode alphanumérique des QR codes : les données binaires y tiennent avec un faible surcoût.

Fonctionne entièrement dans votre navigateur. Aucune donnée n’est envoyée.

Mode d’emploi

  1. Choisissez Encoder pour transformer du texte en Base45, ou Décoder pour retrouver le texte ou les octets à partir du Base45.
  2. Saisissez ou collez vos données, ou ouvrez un fichier. Conservez les espaces : ils font partie de l’alphabet.
  3. Pour décoder des données binaires comme la charge utile d’un certificat, passez la sortie en Hexa.
  4. Copiez le résultat ou téléchargez-le sous forme de fichier.

Qu’est-ce que Base45 ?

Base45 est défini dans la RFC 9285. Son alphabet comprend les chiffres 0-9, les lettres majuscules A-Z et neuf symboles : l’espace et $ % * + - . / :. Ce sont exactement les 45 caractères qu’un QR code peut stocker dans son mode alphanumérique compact. Notez que l’espace est un vrai caractère de l’alphabet, et non un séparateur.

L’encodeur traite l’entrée deux octets à la fois, les lit comme un nombre de 0 à 65535 et écrit ce nombre sous forme de trois chiffres Base45, le chiffre de poids faible en premier. Un dernier octet isolé donne deux caractères. Sous forme de texte, le résultat fait 1,5 fois la taille de l’entrée, plus qu’avec Base64.

Pourquoi Base45 convient aux QR codes

En mode alphanumérique, un QR code regroupe deux caractères dans 11 bits. Base64 ne peut pas utiliser ce mode, car il a besoin de lettres minuscules ; il doit donc se rabattre sur le mode octet, à 8 bits par caractère, soit environ 10,7 bits par octet de données. Base45 n’a besoin que de 8,25 bits par octet en mode alphanumérique : les mêmes données tiennent dans un QR code plus petit, plus facile à scanner.

Lors du décodage, conservez les espaces exactement tels quels ; seuls les sauts de ligne sont ignorés. Les lettres minuscules ne font pas partie de l’alphabet et sont signalées comme non valides.

Décoder les certificats COVID numériques de l’UE

Les QR codes des certificats COVID numériques de l’UE contiennent un texte qui commence par HC1:. Le reste est du Base45 : les données du certificat sont encodées en CBOR, signées avec COSE, compressées avec zlib, puis encodées en Base45. Pour en examiner le contenu :

  1. Supprimez le préfixe HC1:. Ses quatre caractères sont du Base45 valide : les laisser produit des octets erronés.
  2. Décodez le reste ici avec la sortie Hexa. Les données zlib commencent généralement par l’octet 78.
  3. Décompressez les octets avec zlib et analysez le CBOR avec un autre outil.

Cet outil ne prend en charge que l’étape Base45. Il ne décompresse pas les données, ne les analyse pas et ne vérifie pas la signature.

Base45 dans le code

# Python (pip install base45)
import base45
base45.b45encode(b'AB')     # exemple de la RFC 9285 : BB8
base45.b45decode('BB8')     # b'AB'

Spécifications

Alphabet0-9 A-Z espace $ % * + - . / :
Taille de sortie3 caractères pour 2 octets (150 %)
RemplissageAucun
NormeRFC 9285
Sensible à la casseOui

Exemples

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

Questions fréquentes

Pourquoi la sortie Base45 contient-elle des espaces ?

L’espace est l’un des 45 caractères de l’alphabet : il transporte donc des données. Ne supprimez pas les espaces d’un texte Base45 et ne les regroupez pas, sinon le décodage échouera ou donnera des octets erronés.

Comment décoder une chaîne HC1: ?

Supprimez le préfixe HC1:, décodez le reste avec la sortie Hexa, puis décompressez le résultat avec zlib et lisez les données CBOR avec un outil distinct. Cet outil n’effectue que l’étape Base45.

Base45 est-il sensible à la casse ?

Oui. Seules les lettres majuscules font partie de l’alphabet, car le mode alphanumérique des QR codes n’a pas de minuscules. Une entrée en minuscules est signalée comme non valide, avec sa position.

Base45 est-il plus compact que Base64 ?

En texte brut, non : Base45 fait 1,5 fois la taille de l’entrée, et Base64 environ 1,33 fois. Dans un QR code, oui, car Base45 peut utiliser le mode alphanumérique, plus dense.