Le Base64 est une façon de représenter n'importe quelles données binaires avec seulement 64 caractères imprimables. Ce n'est pas du chiffrement, juste une autre manière d'écrire les mêmes octets. Les 64 caractères sont A–Z, a–z, 0–9, + et /, avec = comme remplissage final. Comme ils passent sans encombre dans les en-têtes HTTP, le JSON, le XML, les e-mails et les URL, le Base64 sert à transporter images et données binaires par des canaux qui n'acceptent que du texte.
Pourquoi 64 caractères ? Parce que 64 = 2⁶ : chaque caractère porte exactement 6 bits. L'encodeur lit 3 octets (24 bits), les découpe en quatre groupes de 6 bits et convertit chaque groupe en un caractère :
Man → TWFu — Toute chaîne Base64 que vous croiserez, y compris celles des JWT et des data URI, fonctionne exactement comme cet exemple.
= complète jusqu'à un multiple de 4.dXNlcjpwYXNz peut le lire. Ne considérez jamais un mot de passe ou une clé d'API « passé en Base64 » comme protégé.Personne ne choisit vraiment d'utiliser le Base64 : il apparaît dans une réponse d'API, un en-tête ou un fichier de configuration. Chaque carte est un cas réel : ce que vous voyez, ce que vous faites ici et ce que vous obtenez.
Une URL comme data:image/png;base64,iVBORw0KGgo… dans du HTML, du CSS ou un bundle webpack.
Copiez tout ce qui suit base64,, collez-le ici et cliquez sur Décoder et formater.
Les contenus texte (code SVG, JSON, CSV) redeviennent lisibles. Les vrais binaires, comme un PNG, donnent des caractères illisibles (voir Pièges courants plus bas) : cette page décode en texte, pas en fichiers.
Un token comme eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMifQ.sig : trois parties séparées par des points. Les deux premières commencent toujours par eyJ, c'est simplement le début d'un objet JSON encodé.
Copiez la partie centrale (entre les deux points), collez-la ici et cliquez sur Décoder et formater. Ou passez le token entier dans le débogueur JWT.
Le payload avec les claims s'affiche en JSON formaté dans son propre onglet, prêt pour la vue arbre ou tableau. Les caractères URL-safe - et _ sont gérés automatiquement.
Un en-tête comme Authorization: Basic dXNlcjpwYXNz dans un dump de requête ou les logs d'un proxy.
Copiez uniquement ce qui suit Basic, collez-le ici et cliquez sur Décoder et formater.
Les identifiants en clair, ici user:pass. Et un rappel de la raison pour laquelle l'authentification Basic n'est acceptable que sous HTTPS.
Un long bloc de texte coupé en lignes sous Content-Transfer-Encoding: base64 quand on affiche la source d'un e-mail ou un fichier .eml.
Rassemblez les lignes en une seule chaîne (les retours à la ligne internes ne font pas partie de l'alphabet), collez-la et cliquez sur Décoder et formater.
Le contenu texte de cette partie de l'e-mail. Une pièce jointe binaire donnera du bruit, pour la même raison que le PNG ci-dessus.
Un champ comme "payload": "eyJ1c2VySWQiOjQyfQ==" dans une réponse d'API : un service a glissé des données encodées là où du texte était attendu.
Copiez la valeur, collez-la ici et cliquez sur Décoder et formater.
Un nouvel onglet numéroté avec le résultat formaté en JSON ; votre réponse d'origine reste intacte dans l'éditeur et vous pouvez les comparer côte à côte.
Deux sens, deux boutons, aucune configuration. Tout s'exécute dans votre navigateur : rien n'est envoyé ni enregistré.
+ et /) avec le remplissage = correct.=.Les sites d'encodage à boîte unique vous font travailler une chaîne à la fois. Cette page conserve toute une session :
Chaque décodage ouvre un onglet numéroté — Base64 #1, Base64 #2, … — au lieu d'écraser votre travail. Votre Base64 d'origine vit dans l'éditeur racine : le bouton + au bout de la barre d'onglets y revient, et changer d'onglet préserve le contenu de chacun. Fermez les onglets avec le ✕ au survol ; fermer le dernier vous ramène à l'encodeur.
Survolez un onglet et cliquez son icône ⇄, puis cliquez l'icône ⇄ d'un second onglet. Une barre de confirmation signale la sélection, et les deux contenus s'ouvrent côte à côte sur la page de comparaison JSON avec leurs étiquettes — parfait pour comprendre pourquoi deux résultats censés être identiques diffèrent.
Quand un décodage produit du JSON, la barre bascule vers l'ensemble complet du formateur : vues Code / Tree / Table, recherche, Format, Minify, Anonymize, Escape/Unescape, plus Copy, Paste, Upload et Download. Les décodages non JSON restent en simple texte.
Quatre-vingt-dix pour cent des rapports « mon Base64 ne marche pas » tombent dans cinq cases :
| Symptôme | Cause | Correction |
|---|---|---|
| Rejet avec “Content is not a valid Base64 string.” | Le validateur a trouvé un caractère hors alphabet — généralement un espace, un retour à la ligne ou un guillemet copié avec la chaîne — ou la longueur laisse un caractère en trop après retrait du remplissage. | Recopiez la chaîne exacte sans guillemets autour, rejoignez les lignes coupées et vérifiez que rien n'a été tronqué aux extrémités. |
| Fonctionne ici mais échelle ailleurs (ou l'inverse) | Remplissage = manquant. Beaucoup de décodeurs exigent une longueur multiple de 4 ; cette page complète automatiquement, pas les outils stricts. | Ajoutez des = jusqu'à ce que la longueur se divise par 4 avant de nourrir un décodeur plus strict. |
| Un segment JWT refuse de se décoder ailleurs | Les JWT utilisent base64url : + devient - et / devient _, souvent sans aucun remplissage. | Ici c'est automatique — les deux alphabets sont acceptés et normalisés. Ailleurs, remplacez -/_ par +// et complétez le remplissage d'abord. |
La sortie décodée ressemble à �PNG | La charge était un vrai binaire (image, zip, police). Le décodage a produit les bons octets ; leur rendu en texte UTF-8 crée des caractères de remplacement. | Rien n'est corrompu — on ne peut simplement pas afficher des octets comme du texte. Pour les binaires, utilisez des outils orientés fichiers ou servez-les via une data URI. |
| Un Base64 style e-mail refuse de valider | MIME coupe la sortie à 76 colonnes. Seuls les espaces extérieurs sont retirés ici ; les retours à la ligne internes sont des caractères illégaux. | Rejoignez les lignes en une seule chaîne (un rechercher-remplacer des retours à la ligne suffit) et décodez à nouveau. |
| « C'est du Base64, donc ma clé API est cachée, non ? » | Non. Encoder n'ajoute aucun secret — chaque décodeur, celui-ci inclus, l'inverse instantanément. | Protégez les secrets par chiffrement ou hachage côté serveur, gardez-les totalement hors du code client, et rotatez toute clé déjà expédiée encodée en Base64. |
Les mêmes opérations loin de cette page — entrées identiques, sorties identiques :
| Commande / syntaxe | Ce que ça fait |
|---|---|
| btoa('Man') // 'TWFu' | Encodage en JS navigateur. Latin-1 uniquement — échoue sur les emojis ou tout caractère au-dessus de U+00FF. |
| atob('TWFu') // 'Man' | Décodage en JS navigateur. |
| btoa(String.fromCharCode(...new TextEncoder().encode(s))) | Astuce d'encodage compatible Unicode — la même approche qu'utilise cet outil en interne, par blocs pour les grandes entrées. |
| echo -n 'Man' | base64 # TWFu | Encodage en ligne de commande. L'option -n supprime le retour à la ligne de echo — sans elle vous encoderiez Man\n et obtiendriez TWFuCg==. |
| echo 'TWFu' | base64 -d # Man | Décodage en ligne de commande (GNU coreutils). macOS utilise --decode ou -D ; GNU propose aussi -w 0 pour désactiver la coupure à 76 colonnes. |
| data:[mediatype][;base64],DATA | Anatomie d'une data URI — p. ex. data:text/plain;base64,SGVsbG8=. Tout ce qui suit la virgule est du Base64 pur. |
| header.payload.signature | Anatomie d'un JWT : trois segments base64url. En-tête et payload se décodent en JSON ; la signature se décode en octets bruts et ne devrait pas être lisible. |
Non. L'encodage, le décodage, la validation et le formatage se font dans votre navigateur avec JavaScript. Aucune requête n'est envoyée, et une fois la page chargée, vous pouvez continuer à l'utiliser hors ligne.
Oui. Les caractères - et _ sont normalisés automatiquement et l'absence de remplissage est tolérée. En revanche, un token complet avec ses points n'est pas du Base64 valide : décodez chaque partie séparément ou utilisez le débogueur JWT.
Non. La sortie utilise toujours l'alphabet standard (+, /, =). Si le système cible exige la variante URL-safe, remplacez + par -, / par _ et retirez les = finaux.
C'est voulu. La chaîne d'origine reste dans l'éditeur racine et chaque résultat a son onglet numéroté : vous pouvez décoder plusieurs charges à la suite, les examiner une à une et envoyer deux d'entre elles à la comparaison sans les recoller.
Il n'y a pas de limite artificielle ; tout dépend de la mémoire de l'onglet. Plusieurs Mo passent sans difficulté sur ordinateur. L'encodage se fait par blocs, donc les très longues entrées ne plantent pas comme le ferait un appel direct à btoa.
Gratuit, sans compte, sans limite d'utilisation et sans filigrane. Comme tous les outils du site, il s'exécute sur votre appareil : vos données ne sont ni envoyées ni stockées sur un serveur.
Vous travaillez avec des tokens ? Le débogueur JWT décode le token complet (en-tête, payload et vérification de signature) et complète bien le décodage par morceaux de cette page. Pour poursuivre l'édition du résultat, utilisez le formateur JSON ; et pour comparer deux résultats, la comparaison JSON prend le relais là où s'arrête la comparaison d'onglets.
Collez du texte ou une chaîne Base64 pour l'encoder ou la décoder en un clic. Si le résultat est du JSON, il est formaté automatiquement, et vous pouvez ouvrir plusieurs onglets pour les comparer côte à côte. Tout dans votre navigateur, rien n'est envoyé.
Collez du texte ou du Base64 pour commencer