Aidez-nous à améliorer JSON Workbench : racontez-nous comment vous l'utilisez.
01

Qu'est-ce que le Base64 ?

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 :

M
'M' = 77
01001101
a
'a' = 97
01100001
n
'n' = 110
01101110
24 bits
010011010110000101101110→ 4 × 6 bits
T
010011 = 19
W
010110 = 22
F
000101 = 5
u
101110 = 46

Man → TWFu — Toute chaîne Base64 que vous croiserez, y compris celles des JWT et des data URI, fonctionne exactement comme cet exemple.

33 % plus volumineux. 3 octets en entrée donnent 4 caractères, donc le résultat est environ un tiers plus gros. Si l'entrée n'est pas un multiple de 3, le remplissage = complète jusqu'à un multiple de 4.
N'importe qui peut l'inverser. Il n'y a ni clé ni secret : le même alphabet existe dans tous les langages et tous les décodeurs, et l'inversion prend des microsecondes.
Le Base64 n'est pas du chiffrement. Il sert à transporter des octets sans les abîmer, pas à les cacher. Quiconque voit dXNlcjpwYXNz peut le lire. Ne considérez jamais un mot de passe ou une clé d'API « passé en Base64 » comme protégé.
02

Où vous croiserez du Base64

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.

Data URI

Ce que vous voyez

Une URL comme data:image/png;base64,iVBORw0KGgo… dans du HTML, du CSS ou un bundle webpack.

Ce qu'il faut faire

Copiez tout ce qui suit base64,, collez-le ici et cliquez sur Décoder et formater.

Ce que vous obtenez

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.

Token JWT

Ce que vous voyez

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é.

Ce qu'il faut faire

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.

Ce que vous obtenez

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.

En-tête Authorization

Ce que vous voyez

Un en-tête comme Authorization: Basic dXNlcjpwYXNz dans un dump de requête ou les logs d'un proxy.

Ce qu'il faut faire

Copiez uniquement ce qui suit Basic, collez-le ici et cliquez sur Décoder et formater.

Ce que vous obtenez

Les identifiants en clair, ici user:pass. Et un rappel de la raison pour laquelle l'authentification Basic n'est acceptable que sous HTTPS.

E-mails et parties MIME

Ce que vous voyez

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.

Ce qu'il faut faire

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.

Ce que vous obtenez

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.

Base64 dans un JSON

Ce que vous voyez

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.

Ce qu'il faut faire

Copiez la valeur, collez-la ici et cliquez sur Décoder et formater.

Ce que vous obtenez

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.

03

Encoder et décoder

Deux sens, deux boutons, aucune configuration. Tout s'exécute dans votre navigateur : rien n'est envoyé ni enregistré.

Texte → Base64

  1. 1Collez du texte, du JSON, du XML ou du CSV dans l'éditeur vide (ou utilisez Coller).
  2. 2Cliquez sur Encoder : le contenu de l'éditeur est remplacé par sa version Base64. L'encodage est en UTF-8, donc accents, cédille, emojis et autres alphabets sont préservés sans corruption.
  3. 3Récupérez le résultat avec Copier ou Télécharger. La sortie utilise l'alphabet standard (+ et /) avec le remplissage = correct.

Base64 → texte ou JSON

  1. 1Collez la chaîne Base64, standard ou URL-safe, avec ou sans remplissage =.
  2. 2Cliquez sur Décoder et formater (indenté) ou Décoder et minifier (sur une ligne). Un Base64 invalide est refusé avec un message d'erreur au lieu de produire du charabia.
  3. 3Si le texte décodé est du JSON valide, il s'ouvre formaté et validé dans un nouvel onglet ; sinon, il s'ouvre en texte brut.
Lequel utiliser ? Encoder remplace le contenu par sa version encodée ; décoder garde l'original à l'abri et ouvre le résultat à côté. Cette asymétrie est voulue : réencoder ne coûte rien, mais l'original, parfois, si.
04

Onglets et comparaison

Les sites d'encodage à boîte unique vous font travailler une chaîne à la fois. Cette page conserve toute une session :

Sessions multi-onglets

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.

Comparaison d'un onglet à l'autre

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.

Le JSON décodé hérite de tous les outils

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.

Limites honnêtes : les onglets vivent en mémoire pendant cette visite — ils ne survivent pas à un rechargement. Et comme les onglets non JSON sont du texte brut, le bouton Upload n'apparaît qu'une fois le contenu reconnu comme JSON.
05

Gotchas : symptôme → cause → correction

Quatre-vingt-dix pour cent des rapports « mon Base64 ne marche pas » tombent dans cinq cases :

SymptômeCauseCorrection
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 ailleursLes 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 à �PNGLa 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 validerMIME 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.
06

Aide-mémoire

Les mêmes opérations loin de cette page — entrées identiques, sorties identiques :

Commande / syntaxeCe 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 # TWFuEncodage 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 # ManDé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],DATAAnatomie d'une data URI — p. ex. data:text/plain;base64,SGVsbG8=. Tout ce qui suit la virgule est du Base64 pur.
header.payload.signatureAnatomie 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.
07

Questions fréquentes

Mes données sont-elles envoyées à un serveur ?

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.

Décode-t-il le Base64 URL-safe utilisé par les JWT ?

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.

L'encodage produit-il du Base64 URL-safe ?

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.

Pourquoi le décodage ouvre-t-il un nouvel onglet au lieu de remplacer mon texte ?

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.

Jusqu'à quelle taille puis-je aller ?

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.

C'est gratuit ? Faut-il s'inscrire ?

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.