Comment convertir du Base64 en Base32
- Collez le Base64 dans Entrée · Base64. Les caractères URL-safe (
-,_), un remplissage manquant et les sauts de ligne sont acceptés. - Lisez le résultat dans Sortie · Base32 (RFC 4648).
- Pour un lien
otpauth://ou une application d’authentification, décochez Remplissage (=) sous la sortie. - Cliquez sur Copier la sortie. Base32 (RFC 4648) → Base64 dans le sélecteur de sens convertit dans l’autre sens, tout comme la page Base32 en Base64.
Les octets intermédiaires ne changent pas. Une clé de 20 octets en entrée, une clé de 20 octets en sortie, comme le montre le compteur Octets sous l’outil.
Exemples
| Base64 | Base32 | Octets |
|---|---|---|
iEwO+V01Llzjb4MxBUtgEuCNW8o= | RBGA56K5GUXFZY3PQMYQKS3ACLQI2W6K | 20 |
iEwO-V01Llzjb4MxBUtgEuCNW8o | RBGA56K5GUXFZY3PQMYQKS3ACLQI2W6K | 20, entrée URL-safe sans remplissage |
MTIzNDU2Nzg5MDEyMzQ1Njc4OTA= | GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ | 20, le secret de test de la RFC 6238 |
SGVsbG8h3q2+7w== | JBSWY3DPEHPK3PXP | 10 |
Les chaînes des premières lignes ne se ressemblent pas du tout, et c’est normal : Base64 utilise 6 bits par caractère et Base32 en utilise 5, les caractères ne s’alignent donc jamais.
L’erreur à éviter consiste à encoder les caractères Base64 comme du texte. Coller iEwO+V01Llzjb4MxBUtgEuCNW8o= dans un encodeur texte vers Base32 donne NFCXOTZLKYYDCTDM…, du Base32 valide qui représente les 28 caractères eux-mêmes. Les codes d’authentification qui en découlent ne correspondront jamais à ceux du serveur.
Configurer TOTP à partir d’un secret Base64
Le code serveur stocke souvent le secret partagé en Base64, ou le génère avec une commande comme celle-ci :
openssl rand -base64 20
Pour l’enregistrer dans une application d’authentification, convertissez-le ici, puis construisez l’URI de clé :
otpauth://totp/Example:alice@example.com?secret=RBGA56K5GUXFZY3PQMYQKS3ACLQI2W6K&issuer=Example
algorithm, digits et period peuvent être ajoutés en paramètres ; sans eux, les applications supposent SHA-1, 6 chiffres et 30 secondes. Transformez le lien en QR code avec n’importe quel outil QR local, ou laissez l’utilisateur saisir le secret Base32 à la main. Le secret correspond aux mêmes octets que ceux que votre serveur passe à HMAC : les codes concordent sans rien changer côté serveur.
S’il vous faut un nouveau secret plutôt qu’un secret existant, générez 20 octets aléatoires en Base64 avec le générateur de Base64 aléatoire (préréglage Personnalisé) et convertissez-les ici.
Longueurs pour les tailles de clé courantes
| Clé | Base64 | Base32 sans remplissage | Base32 avec = |
|---|---|---|---|
| 10 octets (80 bits) | 16 | 16 | 16 |
| 16 octets (128 bits) | 24 | 26 | 32 |
| 20 octets (160 bits) | 28 | 32 | 32 |
| 32 octets (256 bits) | 44 | 52 | 56 |
Les tailles multiples de 5 octets, comme 10 et 20, donnent un Base32 sans aucun remplissage.
La même conversion en Python
import base64
secret_b64 = "iEwO+V01Llzjb4MxBUtgEuCNW8o="
base64.b32encode(base64.b64decode(secret_b64)).decode().rstrip("=")
# 'RBGA56K5GUXFZY3PQMYQKS3ACLQI2W6K'
Pour une entrée URL-safe, utilisez base64.urlsafe_b64decode, et ajoutez d’abord le remplissage = s’il a été supprimé. Plus de détails dans Base64 en Python.
FAQ
Pourquoi les applications d'authentification veulent-elles du Base32 et pas du Base64 ?
Le format d’URI de clé otpauth://, que les applications lisent dans les QR codes, définit le secret en Base32. Il doit aussi pouvoir être saisi à la main quand le QR code ne peut pas être scanné, et Base32 n’a ni +, ni /, ni mélange de casse sur lesquels se tromper.
Le secret Base32 doit-il avoir un remplissage = ?
Pas dans un lien otpauth:// : le format d’URI de clé indique que le remplissage doit être omis. Décochez Remplissage (=). Un secret de 20 octets fait 32 caractères et n’a de toute façon pas besoin de remplissage.
Quelle longueur doit avoir un secret TOTP ?
La RFC 4226 exige au moins 128 bits et recommande 160 bits, soit 20 octets : 28 caractères Base64 ou 32 caractères Base32.
Convertir un secret en Base32 présente-t-il un risque de sécurité ?
L’encodage n’ajoute aucune protection et n’en retire aucune : quiconque possède la chaîne, sous l’une ou l’autre forme, peut générer vos codes. Le risque, c’est l’endroit où vous la collez. Cette page la convertit dans le navigateur, et sa Content Security Policy bloque les requêtes réseau autres que le comptage des pages vues de Cloudflare.