Décoder du Base64 en texte lisible (et pourquoi les accents deviennent illisibles)

Vous avez une longue chaîne de lettres et de chiffres, vous savez qu'elle contient du texte, vous la passez dans un décodeur et vous obtenez ceci :


Données de l'utilisateur : François Benoît

Cela devrait donner « Données de l'utilisateur : François Benoît ». Le contenu est intact ; ce qui échoue, c'est la façon dont les octets sont interprétés à la fin. C'est le problème le plus fréquent quand on décode du Base64 en français, et il a une explication précise.

D'où viennent ces caractères

Le Base64 ne stocke pas du texte, il stocke des octets. En décodant, vous récupérez exactement les octets d'origine — mais il faut ensuite décider quelles lettres ces octets représentent. C'est là que ça casse.

En UTF-8, la norme actuelle, le é n'occupe pas un octet mais deux : C3 A9. Si le décodeur interprète ces octets un par un avec une ancienne table comme le Latin-1, il affiche deux caractères distincts : à et ©. D'où Données.

La règle pour le reconnaître : si vous voyez Ã,  ou †exactement là où devrait se trouver un accent, une cédille ou des guillemets, le problème est un problème d'encodage, pas de Base64. Les données sont intactes, elles sont simplement mal lues.

La solution consiste à utiliser un décodeur qui traite la sortie comme de l'UTF-8. Celui de ce site le fait par défaut : les accents, la cédille et les caractères comme œ ressortent correctement sans rien configurer.

Reconnaître une vraie chaîne Base64

Avant de vous acharner sur un texte, vérifiez que c'en est bien une. Les indices :

Ces = finaux sont du remplissage, ni une erreur ni une partie du contenu. Le Base64 traite les données par groupes de trois octets ; quand le dernier groupe est incomplet, il est complété par des = pour que la longueur tombe juste. Leur présence est normale.

Si une chaîne refuse de se décoder, commencez justement par regarder s'il ne manque pas ces = finaux — un cas fréquent quand le texte a été copié depuis un mail ou une messagerie qui a tronqué la fin.

La variante qui fait échouer un essai sur deux

Il existe une version dite Base64 URL-safe qui remplace deux caractères :

Base64 standardURL-safe
+-
/_

La raison est que + et / ont déjà un sens dans une URL. Cette variante est très répandue dans les jetons et les paramètres web, et elle arrive généralement sans les = de fin.

Si vous essayez de décoder quelque chose récupéré dans une URL ou un jeton et que ça ne fonctionne pas, c'est presque certainement ça. Remplacez les - par des + et les _ par des /, ajoutez des = jusqu'à obtenir un multiple de 4, puis décodez à nouveau.

Décoder un JWT

Un jeton JWT se présente ainsi : xxxxx.yyyyy.zzzzz, avec deux points qui le découpent en trois parties.

La première est l'en-tête, la deuxième est la charge utile — celle qui vous intéresse : elle contient les données du jeton, par exemple l'utilisateur ou la date d'expiration. Les deux sont en Base64 URL-safe. Copiez uniquement le bloc du milieu, entre les deux points, et décodez-le : vous obtiendrez du JSON lisible.

La troisième partie est la signature. Ce n'est pas du texte, la décoder ne donne rien d'exploitable. Elle sert à vérifier que le jeton n'a pas été modifié.

Un avertissement qui compte

Le Base64 n'est pas du chiffrement. Il ne fait que changer la représentation des données, et n'importe qui peut faire l'opération inverse en une seconde, sans aucun mot de passe. Qu'une donnée soit « en Base64 » ne signifie absolument pas qu'elle est protégée.

Cela a des conséquences concrètes : si vous décodez un JWT et y trouvez des données personnelles, ces données sont lisibles par quiconque possède le jeton. Et pour la même raison, ne stockez jamais un mot de passe ou une clé « encodés en Base64 » en pensant qu'ils sont à l'abri.

En pratique

Vous pouvez décoder vos chaînes avec Base64 encoder/décoder. L'outil fonctionne dans les deux sens et traite le résultat en UTF-8, donc le texte français ressort avec ses accents à leur place.

Tout s'exécute dans votre navigateur, ce qui compte davantage ici qu'ailleurs : si vous décodez un jeton ou un extrait de configuration, ces données n'ont rien à faire sur le serveur de qui que ce soit. Vous pouvez le vérifier en ouvrant l'onglet réseau de votre navigateur pendant l'utilisation — aucune requête ne part.

▶ Ouvrir l'outil

AD

Plus d'articles