Comment encoder du texte en Base32
- Tapez ou collez du texte dans Entrée · Texte. Avec En direct coché, la sortie se met à jour à chaque frappe.
- Lisez le résultat dans Sortie · Base32 (RFC 4648). Décochez Remplissage (=) sous la sortie pour supprimer les
=finaux. - Pour une autre variante, ouvrez Vers et choisissez Base32hex, Crockford Base32 ou z-base-32.
- Pour décoder, cliquez sur Base32 (RFC 4648) → Texte dans le sélecteur de sens. Le décodeur Base32 dédié démarre dans ce sens.
- Utilisez Copier la sortie ou Télécharger pour emporter le résultat.
Le texte est converti en octets en UTF-8 par défaut. S’il vous faut le Base32 du même texte dans un autre encodage, par exemple Windows-1252 ou UTF-16LE, changez le Jeu de caractères sous l’entrée.
Comment fonctionne Base32
Base32 lit l’entrée 5 bits à la fois et écrit un caractère par tranche de 5 bits. Cinq octets (40 bits) deviennent exactement huit caractères : la sortie est donc 60 % plus grosse que l’entrée. Une chaîne Base64 des mêmes données serait 33 % plus grosse ; c’est le prix que paie Base32 pour n’utiliser que des lettres majuscules et six chiffres.
Quand la longueur de l’entrée n’est pas un multiple de 5 octets, le dernier groupe est complété par des = jusqu’à 8 caractères. Voici les vecteurs de test de la RFC 4648, produits par cet outil :
| Entrée | Base32 | Sans remplissage |
|---|---|---|
f | MY====== | MY |
fo | MZXQ==== | MZXQ |
foo | MZXW6=== | MZXW6 |
foob | MZXW6YQ= | MZXW6YQ |
fooba | MZXW6YTB | MZXW6YTB |
foobar | MZXW6YTBOI====== | MZXW6YTBOI |
Le remplissage ne porte aucune donnée. Un décodeur peut déduire le nombre d’octets du nombre de vrais caractères, et c’est pourquoi beaucoup de formats l’omettent.
Les variantes de Base32 : RFC 4648, base32hex, Crockford, z-base-32
« Base32 » désigne une famille. Ses quatre membres placent 5 bits par caractère ; ils diffèrent par l’alphabet et par l’usage du remplissage. Les mêmes cinq octets, Hello, dans chacun :
| Variante | Alphabet | Hello | Remplissage | Où on la rencontre |
|---|---|---|---|---|
| Base32 RFC 4648 | A–Z, 2–7 | JBSWY3DP | = | Secrets TOTP/2FA, adresses onion Tor v3, CIDv1 IPFS (b…, en minuscules) |
| Base32hex | 0–9, A–V | 91IMOR3F | = | Enregistrements NSEC3 de DNSSEC ; les chaînes encodées se trient dans le même ordre que les octets |
| Crockford Base32 | 0–9, A–Z sans I L O U | 91JPRV3F | aucun | Identifiants que des personnes lisent à voix haute et tapent |
| z-base-32 | ybndrfg8ejkmcpqxot1uwisza345h769 | jb1sa5dx | aucun | Clés et identifiants destinés aux humains |
Base32hex et Crockford se ressemblent, mais ce sont deux alphabets différents : après H, ils divergent, si bien que 91IMOR3F et 91JPRV3F représentent les mêmes octets. Choisir le mauvais décode sans erreur et vous donne en silence d’autres octets.
Le décodeur Crockford d’ici est tolérant, comme Crockford l’avait prévu : il lit I et L comme 1, O comme 0 et ignore les tirets, si bien que 91JP-RV3F donne toujours Hello. Il n’ajoute ni ne vérifie le symbole de contrôle facultatif de Crockford.
Base32 pour les secrets TOTP et 2FA
Les applications d’authentification reçoivent leur secret par un lien otpauth://, généralement affiché sous forme de QR code :
otpauth://totp/Example:alice@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Example
Le paramètre secret est du Base32 RFC 4648 sans remplissage. JBSWY3DPEHPK3PXP fait 16 caractères et contient donc 10 octets. La RFC 4226 recommande un secret de 160 bits (20 octets), soit 32 caractères Base32. Si votre secret est stocké en Base64 ou en hex, convertissez-le avec Base64 en Base32. Taper le texte Base64 dans cette page encode ses caractères, ce qui donne du Base32 valide, mais pour de mauvais octets, et chaque code généré à partir de lui sera rejeté.
Un secret TOTP est une clé : quiconque le possède peut générer vos codes. Cette page traite le secret dans l’onglet de votre navigateur, et sa Content Security Policy empêche la page de faire des requêtes réseau autres que le comptage des pages vues de Cloudflare.
Base32 en ligne de commande et en Python
GNU coreutils fournit une commande base32 qui fonctionne comme base64 :
printf 'Hello' | base32
printf 'JBSWY3DP' | base32 -d
La première ligne affiche JBSWY3DP, la seconde Hello. La bibliothèque standard de Python a les trois formes de la RFC 4648 :
import base64
base64.b32encode(b"Hello") # b'JBSWY3DP'
base64.b32hexencode(b"Hello") # b'91IMOR3F'
base64.b32encode(b"Hi").decode().rstrip("=") # 'JBUQ'
D’autres recettes d’encodage se trouvent sur la page Python. Pour le décodage, y compris les erreurs de remplissage et de minuscules que lève Python, voir le décodeur Base32.
FAQ
Pourquoi la sortie Base32 se termine-t-elle par ====== ?
Base32 travaille sur des blocs de 5 octets qui deviennent 8 caractères. Quand le dernier bloc est plus court, la RFC 4648 complète les 8 caractères avec des = : Hi devient JBUQ====. Décochez Remplissage (=) si le destinataire veut le JBUQ nu.
Base32 est-il sensible à la casse ?
L’alphabet de la RFC 4648 est en majuscules, mais la plupart des décodeurs acceptent aussi les minuscules, et celui-ci aussi. Python fait exception : base64.b32decode rejette les minuscules, sauf si vous passez casefold=True.
Faut-il utiliser Base32 ou Base64 ?
Base64 quand seuls des programmes lisent les données : il est plus court (33 % de surcoût contre 60 %). Base32 quand des personnes lisent, tapent ou dictent la valeur, ou quand elle doit survivre à des systèmes insensibles à la casse, comme les noms DNS ou certains systèmes de fichiers.
Quels caractères Base32 utilise-t-il ?
Le Base32 RFC 4648 utilise A–Z et 2–7, plus = pour le remplissage. Les chiffres 0, 1, 8 et 9 sont exclus : une chaîne qui en contient est du base32hex, du Crockford, ou pas du Base32 du tout.