Comment valider une chaîne Base64
- Collez la chaîne dans Base64 à vérifier. Les sauts de ligne, l’armure PEM et les préfixes
data:peuvent rester : ils sont signalés comme constats et le reste est quand même analysé. - Lisez le verdict en haut. Chaque problème est listé avec sa position, par exemple « ligne 3, colonne 17 (car. 169) ».
- Regardez Votre entrée, problèmes surlignés pour voir les caractères fautifs marqués sur place.
- Consultez À quelles variantes de Base64 correspond-elle ? pour savoir si la chaîne est valide en Base64 standard, sans remplissage, URL-safe, MIME ou PEM, et pourquoi elle échoue là où elle échoue.
- Appuyez sur Corriger pour passer en mode réparation, qui nettoie la chaîne.
Ce que vérifie le validateur
- Les caractères hors de l’alphabet, affichés avec leur point de code Unicode pour rendre visibles les caractères invisibles comme l’espace insécable (U+00A0) ou l’espace sans chasse (U+200B).
- Les alphabets mélangés :
+et/du Base64 standard avec-et_du Base64URL dans une même chaîne. - Un
=au milieu, ce qui signifie presque toujours que deux valeurs encodées ont été collées ensemble. - Une longueur impossible : une fois le remplissage retiré, une longueur dont le reste vaut 1 dans la division par 4 ne peut sortir d’aucun encodeur. Un caractère manque ou est en trop.
- Le remplissage : manquant, en trop ou ne correspondant pas à la longueur des données.
- Les bits finaux non canoniques dans le dernier caractère (RFC 4648 §3.5).
- Les espaces et le découpage des lignes : espaces et tabulations, largeur des lignes, et fins de ligne en CRLF, en LF ou mélangées.
Détails ajoute la longueur, la longueur mod 4, l’état du remplissage, l’alphabet, la taille décodée et le type de contenu détecté. La copie surlignée de l’entrée est limitée aux 20 000 premiers caractères, mais l’analyse couvre toujours la chaîne entière.
Même chaîne, décodeurs différents
« Valide » dépend de qui pose la question. Ces cinq chaînes ont été passées dans quatre décodeurs courants (Python 3.13, Node.js 24, le atob du WHATWG et GNU coreutils 9.7) :
| Entrée | Problème | Python b64decode(s, validate=True) | Node Buffer.from(s, "base64") | atob(s) | base64 -d |
|---|---|---|---|---|---|
SGVsbG8gd29ybGQ | = manquant | erreur | Hello world | Hello world | Hello world |
SGVsbG9= | dernier caractère non canonique | Hello | Hello | Hello | erreur |
SGVsbG8=V29ybGQ= | deux valeurs collées | erreur | Hello (le reste est perdu) | erreur | HelloWorld |
SGVsbG8gd | reste 1 | erreur | Hello | erreur | erreur |
SGVs bG8= | une espace | erreur | Hello | Hello | erreur |
La case dangereuse est celle où Node renvoie tranquillement Hello pour l’entrée collée et perd la moitié des données sans la moindre erreur. Cet outil signale donc chaque écart, y compris ceux que votre propre décodeur tolère. Le tableau des variantes indique ensuite à quel format strict la chaîne correspond.
Une chaîne valide est-elle vraiment du Base64 ?
abcd, test et 1234 sont tous du Base64 valide. Chacun se décode en trois octets d’apparence aléatoire. L’outil répond donc aussi à Est-ce vraiment du Base64 ? avec un score de 0 à 100 et les raisons qui le justifient, chacune marquée comme plaidant pour ou contre le Base64 :
- pour : un remplissage correct, un mélange de majuscules, minuscules et chiffres, une grande variété de caractères, un début en
eyJ(le Base64 de{", typique du JSON et des JWT), ou des octets qui se décodent en un type de fichier connu ou en texte lisible ; - contre : uniquement des lettres (ce pourrait être un mot), uniquement des chiffres hex (ce pourrait être une chaîne hex), uniquement des chiffres (probablement un nombre), une seule casse, ou une chaîne très courte.
Prenez le score comme un indice : c’est une heuristique, et une chaîne courte peut la tromper dans un sens comme dans l’autre.
Vérifier du Base64 dans le code
Le test pratique le plus strict est l’aller-retour : décoder, réencoder et comparer. Il rejette d’un coup les espaces, le remplissage manquant et les fins non canoniques.
import base64
def is_canonical_base64(s):
try:
return base64.b64encode(base64.b64decode(s, validate=True)).decode() == s
except ValueError:
return False
En Node.js, la même idée s’écrit Buffer.from(s, "base64").toString("base64") === s. Une expression régulière comme ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$ vérifie l’alphabet et la longueur, mais elle accepte SGVsbG9= et la chaîne vide. Pour les chaînes URL-safe, convertissez-les d’abord ou utilisez l’alphabet correspondant ; voir Base64 et Base64URL. Les messages d’erreur propres à chaque langage sont rassemblés dans Erreurs Base64.
FAQ
Comment savoir si une chaîne est du Base64 ?
Au sens strict, une chaîne est du Base64 standard valide si elle n’utilise que A–Z, a–z, 0–9, + et /, si sa longueur est un multiple de 4 et si au plus deux = se trouvent à la fin. Beaucoup de mots ordinaires passent ce test : l’outil ajoute donc un score de 0 à 100 fondé sur l’aspect de la chaîne et sur ce qu’elle donne une fois décodée.
Pourquoi mon Base64 se décode-t-il dans un langage mais échoue-t-il dans un autre ?
Les décodeurs n’ont pas tous la même rigueur. Buffer.from de Node accepte presque tout, b64decode(s, validate=True) de Python refuse un remplissage manquant, et base64 -d de GNU refuse les derniers caractères non canoniques. Le tableau ci-dessus montre les mêmes cinq chaînes dans quatre décodeurs.
Qu'est-ce qu'un Base64 non canonique ?
Le dernier caractère porte quelques bits inutilisés qui devraient valoir zéro. SGVsbG8= et SGVsbG9= se décodent tous deux en Hello, mais seul le premier est canonique. La RFC 4648 autorise les décodeurs à refuser le second, et un réencodage ne le reproduit jamais.
Une chaîne Base64 valide est-elle sûre à décoder ?
La validité ne dit rien du contenu. La section Détails affiche la taille décodée et le type de contenu détecté, avec un lien vers le décodeur adapté : vous savez ainsi s’il s’agit de texte, d’une image ou d’autre chose avant de l’enregistrer.