Comment décoder du Base32
- Collez la chaîne dans Entrée · Base32 (RFC 4648). Majuscules ou minuscules, espaces entre les groupes et sauts de ligne sont tous acceptés, et le remplissage
=est facultatif. - Lisez le texte décodé dans Sortie · Texte. Le jeu de caractères par défaut est UTF-8 ; changez le Jeu de caractères sous la sortie si le texte vient d’un autre système.
- Si la sortie est un fouillis de symboles, les données sont binaires. Réglez Vers sur Hex ou Base64 pour voir les octets, ou cliquez sur Enregistrer les octets pour les télécharger sous forme de fichier.
- Si l’entrée utilise un autre alphabet, réglez De sur Base32hex, Crockford Base32 ou z-base-32.
- Pour encoder, cliquez sur Texte → Base32 (RFC 4648) dans le sélecteur de sens, ou utilisez l’encodeur Base32.
Ce que le décodeur accepte et rejette
Le décodeur est tolérant sur la forme et strict sur le contenu :
| Entrée | Résultat |
|---|---|
JBSWY3DP | Hello |
jbswy3dp | Hello ; la casse ne compte pas |
JBSW Y3DP EHPK 3PXP | 10 octets, 48656c6c6f21deadbeef en hex |
MZXW6YQ | foob ; le remplissage manquant ne gêne pas |
JBSWY3D0 | Erreur : caractère "0" inattendu à la position 8 |
L’erreur pointe le premier caractère qui ne fait pas partie de l’alphabet. Un 0, 1, 8 ou 9 signifie presque toujours que la chaîne utilise un autre alphabet Base32, et un + ou un / qu’il s’agit en réalité de Base64 ; essayez le décodeur Base64.
Décoder un secret 2FA ou TOTP
La clé qu’une application d’authentification affiche lors de la configuration, souvent groupée comme jbsw y3dp ehpk 3pxp, est du Base32 RFC 4648. La décoder donne la clé HMAC brute, faite d’octets aléatoires : regardez-la donc en Hex plutôt qu’en Texte. La longueur indique la taille de la clé : 16 caractères font 10 octets, 32 caractères font 20 octets (160 bits, la taille que recommande la RFC 4226), 52 caractères font 32 octets.
Pour vérifier que vous avez le bon secret, générez un code à partir de lui. Cette fonction Python décode le secret avec la même tolérance, puis suit la RFC 6238 :
import base64, hashlib, hmac, struct
def totp(secret, t, digits=6, step=30):
s = secret.replace(" ", "").upper()
key = base64.b32decode(s + "=" * (-len(s) % 8))
mac = hmac.new(key, struct.pack(">Q", t // step), hashlib.sha1).digest()
off = mac[-1] & 0x0F
code = struct.unpack(">I", mac[off:off + 4])[0] & 0x7FFFFFFF
return str(code % 10**digits).zfill(digits)
totp("GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ", 59, 8) # '94287082'
Le secret et le résultat attendu 94287082 sont le vecteur de test SHA-1 de la RFC 6238. Pour le code actuel, passez int(time.time()) comme t. D’autres méthodes de décodage se trouvent sur la page Python.
CIDv1 IPFS et autres Base32 préfixés
Certains formats placent un marqueur devant le Base32. Les chaînes CIDv1 d’IPFS commencent par b, le code multibase du Base32 RFC 4648 en minuscules sans remplissage : dans bafybei…, le b est le préfixe et afybei… les données. Retirez le b, décodez, et réglez Vers sur Hex. Les premiers octets sont la version du CID (01), le type de contenu (70 pour dag-pb) et l’en-tête multihash (1220 pour un SHA-256 de 32 octets).
Les adresses onion Tor v3 fonctionnent de la même façon, sans préfixe : les 56 caractères avant .onion sont le Base32 de 35 octets, une clé publique de 32 octets, une somme de contrôle de 2 octets et un octet de version (03).
Problèmes courants
- Python lève
binascii.Error: Non-base32 digit found. L’entrée est en minuscules. Passezcasefold=Trueàb32decode, ou appelez d’abord.upper(). - Python lève
binascii.Error: Incorrect padding. Les signes=ont été supprimés. Complétez la longueur jusqu’à un multiple de 8, comme dans la fonction ci-dessus. base32 -dafficheinvalid input. GNU coreutils n’accepte ni les minuscules ni les espaces. Nettoyez d’abord la chaîne ou décodez-la ici.- Le texte se décode, mais en autre chose. Les chaînes base32hex et Crockford se décodent sans erreur avec le mauvais alphabet. Si la source dit « Base32 » mais que la chaîne ne contient ni
0, ni1, ni8, ni9, la RFC 4648 reste la meilleure hypothèse ; sinon, essayez les deux autres.
FAQ
Comment décoder un secret TOTP ?
Collez le secret (la valeur secret= d’un lien otpauth://, ou la clé texte qu’une application affiche à la place du QR code) et réglez Vers sur Hex. Le résultat est la clé HMAC brute. Ce sont des octets aléatoires : la sortie Texte paraîtra illisible, et c’est normal.
Pourquoi Python affiche-t-il Incorrect padding en décodant du Base32 ?
base64.b32decode veut une longueur multiple de 8. Ajoutez d’abord les = manquants : s + "=" * (-len(s) % 8). Ce décodeur n’a pas besoin de remplissage.
Puis-je décoder un ULID ici ?
Pas directement. Un ULID utilise l’alphabet Crockford, mais il encode un seul nombre de 128 bits en 26 caractères, en commençant par 2 bits inutilisés. L’option Crockford d’ici empaquette les octets à partir du premier caractère : elle renvoie donc des octets décalés pour un ULID.
Quels caractères sont invalides en Base32 ?
En Base32 RFC 4648, tout ce qui n’est pas A–Z, 2–7 ou un = final. Les chiffres 0, 1, 8 et 9 sont le signe habituel que la chaîne est en base32hex ou en Crockford ; changez De pour les essayer.