Base64 : encoder et décoder texte, fichiers et images en ligne

Base64 : encoder et décoder texte, fichiers et images en ligne

Convertir du texte, un fichier ou une image en Base64 (et inversement) sans backend — data URI CSS, pièce jointe email, payload JWT. 100 % local.

18.09.2026
15 min de lecture
Partager cet article:
Base64EncodageData URITutoriel

Pourquoi Base64 revient dans chaque stack

Une image de fond CSS qui ne peut pas charger de fichier séparé, une pièce jointe MIME qui doit voyager en ASCII, un segment JWT coincé entre deux points, une option WordPress sérialisée puis enveloppée en Base64 : aucun de ces cas n'est un problème de chiffrement. Ce sont des problèmes de transport. L'encodeur/décodeur Base64 en ligne transforme du texte Unicode en un alphabet compatible ASCII, et inversement, entièrement dans l'onglet. Le convertisseur image vers Base64 fait de même pour un fichier PNG, JPEG, GIF, WebP ou SVG local, en data URI ou en Base64 brut. Rien n'est envoyé. Base64 n'est ni un hash, ni un chiffrement, ni un substitut à TLS. C'est une façon de faire passer des octets dans des canaux qui n'acceptent que des lettres, des chiffres, +, / et le padding. Ces outils sont réunis sur le hub outils d'encodage.

Aller-retour UTF-8 pour le texte Unicode (accents, CJK, emoji), contrairement au btoa natif qui l'altère ou le rejette
Mode URL-safe (RFC 4648) : tiret et tiret bas à la place de + et /, padding omis, comme dans les JWT
Le décodage ignore les espaces, donc les lignes MIME repliées et les segments JWT copiés passent encore
Outil image : PNG, JPEG, GIF, WebP et SVG jusqu'à 32 Mio, en data URI ou en Base64 brut, avec un aperçu passant par un élément img
Tout s'exécute en local : la chaîne ne quitte pas le navigateur
Enchaînez avec Décoder JWT, Encoder URL, les entités HTML, la data URI SVG et le formateur JSON

Quand encoder dans le navigateur, et quand s'en passer

Bons usages

L'encodeur est un scalpel pour une chaîne que vous pouvez coller, pas un CDN.

Lire un header ou payload JWT, ou décoder une ligne MIME repliée, sans ouvrir un REPL
Construire une petite data URI CSS pour une icône déjà optimisée
Vérifier qu'un backend Base64 suit UTF-8 (café, emoji) plutôt que du Latin-1 déguisé
Retirer une enveloppe Base64 d'un blob WordPress ou Laravel avant unserialize
Enseigner la différence entre encodage, hash et chiffrement avec un aller-retour dans le même onglet
Laissez ça au pipeline

Si la réponse dépend d'un fichier que le navigateur ne devrait pas tenir, ou de la crypto, restez en CI ou dans un gestionnaire de secrets.

Images d'en-tête de production, photos de produit ou tout fichier pour lequel 33 % de CSS en plus coûte plus cher qu'une requête HTTP
Secrets : Base64 ne les cache pas, utilisez un coffre plutôt qu'un encodeur
Stockage de mots de passe : un hash (bcrypt ou Argon2), jamais un encodage
HEIC, PDF ou fichiers de plus de 32 Mio : hors périmètre d'image-to-base64
Vérifier une signature JWT contre un JWKS : jwt-verify, pas décoder en espérant que ça suffise

Les erreurs Base64 qui coûtent un après-midi

Appeler encodage un chiffrement

Quiconque peut lire la chaîne peut la décoder. Base64 n'a ni clé, ni contrôle d'intégrité, ni confidentialité. Un jeton qui paraît opaque dans un journal reste du texte clair après un seul décodage. Si les octets doivent rester secrets, chiffrez-les (ou ne les mettez pas dans le payload). S'ils doivent rester authentiques, signez-les avec un HMAC ou une signature JWT, pas avec Base64 lui-même.

Livrer une clé API en Base64 et l'appeler « obfusquée »
Stocker des mots de passe en Base64 au lieu d'un hash (bcrypt, Argon2)
Croire qu'une data URI cache l'asset à qui ouvre le code source
Confondre Base64 et SHA-256 : un digest est à sens unique ; Base64 est réversible par conception
Traitez Base64 comme un papier d'emballage. Décodez quand vous voulez les octets ; ne prenez jamais l'emballage pour un verrou.
Mélanger Base64 standard et Base64URL

La RFC 4648 définit deux alphabets. Le Base64 standard utilise + et / ; il garde en général le padding =. Le Base64 URL-safe (JWT, cookies, chemins) utilise - et _ ; il omet en général le padding. L'option URL-safe de FastMinify effectue les deux substitutions et retire le padding à l'encodage. Au décodage, le mode URL-safe rétablit l'alphabet standard et restaure le padding, tandis que le mode standard transmet la chaîne telle quelle à atob : atob tolère un padding manquant, mais refuse - et _. Une chaîne URL-safe avec l'option désactivée donne donc une erreur d'entrée invalide, alors qu'une chaîne standard avec l'option activée est décodée quand même, car seuls ces deux caractères sont remplacés.

Coller un segment JWT contenant des tirets et des tirets bas alors que l'option URL-safe est désactivée
Faire confiance à un décodage réussi sur une copie tronquée : un = manquant est toléré, donc une chaîne coupée peut donner un texte plus court
Copier le payload d'une data URI (alphabet standard, avec padding) dans un champ JWT
Remplacer + par un tiret à la main à un endroit et oublier de remplacer / par un tiret bas
Quand le décodeur refuse une chaîne qui contient des tirets ou des tirets bas, activez URL-safe. Laissez-le désactivé pour le MIME, les blobs proches du PEM et la plupart des data URI.
Coller un JWT entier dans le décodeur texte

Un JWT compact est formé de trois segments Base64URL séparés par des points, écrits header.payload.signature. Les points ne sont pas du Base64. L'outil Base64 décode une chaîne d'alphabet, pas un jeton à points. Son message d'erreur le dit : collez seulement les caractères encodés, sans points. Pour un JWT, copiez chaque partie entre les points, ou ouvrez le décodeur JWT et inspectez l'en-tête et le payload en une seule étape.

Coller eyJhbGciOi… d'un seul bloc, points compris
Décoder le segment signature comme du texte UTF-8 et attendre un JSON lisible
Utiliser jwt-decode alors que vous n'avez qu'un blob Base64 sans forme header.payload.signature
Oublier que jwt-decode lit des claims et ne remplace pas jwt-verify contre un JWKS
JWT entier → jwt-decode. Un segment ou une chaîne quelconque → Base64. Vérification de signature → jwt-verify, pas les outils de ce guide.
Intégrer une photo en data URI dans le CSS de production

Base64 gonfle les données binaires d'environ 33 % (3 octets deviennent 4 caractères ASCII). Un JPEG de 200 Kio devient environ 267 Kio de CSS. L'image ne peut alors plus être mise en cache séparément de la feuille de style, et elle alourdit une feuille qui bloque déjà l'affichage. Avec HTTP/2, les requêtes supplémentaires coûtent peu, ce qui retire la principale raison d'intégrer. Les data URI se justifient pour de minuscules icônes qui coûteraient sinon une requête. Elles perdent pour les images d'en-tête, les photos de produit et tout ce que vous minifiez déjà comme fichier.

Déposer un PNG de 2 Mio dans image-to-base64 et coller le résultat dans une feuille de style
Croire que Brotli annule les 33 % de croissance : le texte se compresse, mais seulement jusqu'à la taille du fichier d'origine environ
Sauter le guide d'optimisation SVG avant d'intégrer un SVG exporté dans le CSS
Utiliser l'outil Base64 texte sur une image binaire : il encode du texte Unicode, pas des octets de fichier
Convertissez l'image dans l'onglet pour voir l'URI. Ne la livrez que si le fichier est assez petit pour qu'une requête de plus coûte davantage que le surcoût de 33 %.

Choisir entre Base64 standard, URL-safe et data URI

Trois sorties, une famille d'alphabets

Les octets ne changent pas, seule l'écriture change. Le Base64 standard est la forme que produisent le MIME des e-mails et la plupart des API. Le Base64 URL-safe est celle qu'exigent les JWT, les cookies signés et les segments de chemin, pour que + et / n'entrent pas en conflit avec la syntaxe des requêtes. Une data URI est du Base64 standard précédé du préfixe data:<mime>;base64,, ce qui permet à un navigateur de traiter la chaîne comme une ressource.

Standard : A–Z a–z 0–9 + / et le padding =, utilisé par la sortie brute d'image-to-base64, la plupart des documentations et la plupart des bases de données
URL-safe : A–Z a–z 0–9, tiret et tiret bas, padding omis. C'est une option de l'outil texte et l'écriture des en-têtes et des payloads JWT
Data URI : data:image/png;base64,iVBOR…, sortie par défaut d'image-to-base64, pour url() en CSS et img src
Le préfixe n'est pas du Base64. Ne collez pas data:image/… dans le décodeur texte ; retirez-le ou utilisez l'outil image
Outil texte vs image-to-base64 vs data URI SVG

Trois outils, trois entrées. L'encodeur texte applique UTF-8 puis Base64 à une chaîne, collée ou lue dans un fichier texte. Il n'interprète pas un PNG comme des pixels. Le convertisseur image lit les octets du fichier et vérifie le type MIME. PNG, JPEG, GIF, WebP et SVG sont acceptés, et un type MIME vide est refusé au lieu d'être deviné. Il plafonne les fichiers à 32 Mio et produit une data URI ou du Base64 brut. L'aperçu passe uniquement par un élément img : le SVG n'est jamais injecté dans le DOM comme balisage. Pour un SVG utilisé en CSS, avec le choix entre utf-8 et Base64 et un extrait CSS dédié, utilisez SVG vers data URI sur le hub SVG. Son entrée SVG est limitée à 512 Kio, une limite différente pour un autre usage.

Chaîne Unicode, blob JSON, segment JWT, snippet de config → /base64
Fichier raster ou SVG local que vous voulez en data:image/… → /image-to-base64
Source SVG que vous voulez en CSS url() avec choix d'encodage → /svg-to-data-uri
Encoder en pourcentage une valeur de requête n'est pas du Base64 : c'est /url-encode
Base64 n'est ni URL-encode, ni entités HTML, ni un hash

On les confond parce qu'ils « rendent une chaîne plus sûre ». Ils résolvent pourtant des problèmes distincts. URL encode applique l'encodage en pourcentage aux caractères réservés des URI. Les entités HTML échappent le balisage pour qu'une chaîne tienne dans un attribut. Un hash (SHA-256, HMAC) offre une intégrité ou une authenticité à sens unique ; consultez les outils hash et HMAC du hub d'encodage, pas cet article. Base64 ne change que la façon d'écrire les octets.

Besoin d'une chaîne dans un paramètre de requête → URL encode, pas Base64
Besoin d'une chaîne dans du HTML sans casser la balise → entités HTML
Besoin de détecter une altération → hash ou HMAC, puis éventuellement Base64 du digest pour le transport
Besoin d'octets transportables en ASCII dans du JSON, un e-mail ou une data URI → Base64

Ce que Base64 fait vraiment à vos octets

Un alphabet de 64 caractères et un surcoût de 33 %

Base64 prend 24 bits (3 octets) et les écrit sous forme de 4 caractères d'un alphabet de 64 symboles. C'est pourquoi la sortie est plus longue : 4/3, soit environ 33 % de plus, avec du padding si la longueur d'entrée n'est pas un multiple de 3. Ce surcoût est le prix d'un alphabet qui survit à l'e-mail, aux chaînes JSON et au CSS. C'est l'inverse de la minification. Si le payload est du JSON livré en HTTP, minifiez d'abord le JSON, puis n'encodez que si une couche d'enveloppe exige de l'ASCII ; voir le guide de minification JSON.

Avant

foo

Après

Zm9v
3 octets d'entrée → 4 caractères de sortie ; 1 octet restant → 2 caractères + == ; 2 octets restants → 3 caractères + =
L'alphabet est ASCII : il survit au copier-coller, au YAML et aux logs qui abîment le binaire
Les espaces de la chaîne encodée sont ignorés au décodage dans FastMinify ; le MIME replie souvent les lignes à 76 caractères
L'expansion porte sur la forme encodée. Gzip/Brotli sur une data URI dans du HTML est moins efficace que gzip sur le fichier original
UTF-8 d'abord, puis Base64

Le btoa natif de JavaScript opère sur une chaîne binaire (valeurs 0–255). Passez-lui café et il encode sans prévenir l'unique octet Latin-1 de é au lieu des deux octets UTF-8 ; passez-lui un emoji ou un caractère CJK et il lève une exception. FastMinify encode les octets UTF-8 avec TextEncoder, puis Base64, selon le même contrat que Node Buffer.from(text, 'utf8').toString('base64'). Le décodage fait l'inverse avec TextDecoder. Les emoji et le CJK survivent. Si vous décodez un blob qui n'a jamais été du texte UTF-8 (un PNG, un flux gzip), vous obtenez des caractères de remplacement, pas un fichier. Ce blob relève d'image-to-base64 ou d'un dump hex, pas d'un champ texte.

Avant

café

Après

Y2Fmw6k=
café → Y2Fmw6k= (UTF-8 pour é = deux octets C3 A9)
Hello, 世界 → SGVsbG8sIOS4lueVjA==
btoa/atob natifs sans TextEncoder sont le piège Unicode classique ; l'outil en ligne ne prend pas ce chemin
Images binaires : déposez le fichier sur image-to-base64 ; ne collez pas du « binaire » dans l'encodeur texte
Le padding, et pourquoi JWT le retire

Quand la longueur en octets n'est pas un multiple de 3, le Base64 standard ajoute = ou == pour que la longueur de la chaîne soit un multiple de 4. Les contextes URL-safe (JWT, certains cookies) omettent ce padding parce que = est un délimiteur de requête. L'encodage URL-safe de FastMinify le retire ; le décodage URL-safe le remet avant atob. Le décodage standard s'en passe, car atob tolère un padding manquant. Exemples classiques de la RFC : f → Zg==, fo → Zm8=, foo → Zm9v.

Avant

f

Après

Zg==
Un multiple de 4 plus un caractère est toujours refusé par le décodage standard, qui tolère pourtant un padding manquant
Les deux octets FB FF donnent +/8= en Base64 standard et -_8 en Base64 URL-safe, avec l'alphabet remplacé et le padding retiré
Un header JWT {"alg":"HS256","typ":"JWT"} s'encode en eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 sans padding
N'ajoutez pas de padding à la main sur le payload d'une data URI sauf pour réparer une copie tronquée

Encoder un texte, un fichier ou une image dans l'onglet

Encoder ou décoder une chaîne

Ouvrez l'encodeur/décodeur Base64. Collez le texte ou choisissez un fichier texte (la limite côté navigateur est de 32 Mio, comme pour les autres sélections de fichiers du site). Choisissez Encoder ou Décoder. Laissez l'option Base64 compatible URL (URL-safe) désactivée pour le MIME, les payloads de data URI et la plupart des exemples d'API. Activez-la pour les segments JWT, les valeurs de cookies signés et tout ce qui ira dans un chemin. Chargez l'exemple si vous voulez seulement voir comment l'outil fonctionne. Tout reste dans l'onglet.

1

1. Coller ou choisir la source

Texte Unicode pour encoder ; une chaîne d'alphabet Base64 pour décoder. N'incluez ni les points d'un JWT ni un préfixe data:.

2

2. Régler URL-safe selon l'origine de la chaîne

Activée, l'option produit un tiret et un tiret bas, sans padding. Désactivée, elle produit + et / avec le padding =. Une chaîne URL-safe décodée avec l'option désactivée donne une erreur, pas un décodage partiel.

3

3. Copier le résultat

Si vous avez décodé du JSON minifié, envoyez-le au formateur JSON ou au déminificateur JSON en ligne. Ils ne changent que la mise en page : les noms déjà perdus le restent.

Transformer une image locale en data URI

Ouvrez l'outil image vers Base64. Choisissez une image (PNG, JPEG, GIF, WebP ou SVG, jusqu'à 32 Mio) ou déposez-la sur la page. Sélectionnez Data URI pour url() en CSS et img src, ou Base64 brut pour passer le résultat à un autre outil. L'aperçu passe par un élément img, et le SVG n'est pas monté dans le DOM. Les types MIME vides ou non pris en charge sont refusés, car l'outil ne devine pas. Après une icône minuscule, vous pouvez coller l'URI dans le CSS. Après une photographie, ce n'est en général pas recommandé.

Types autorisés : image/png, image/jpeg, image/gif, image/webp et image/svg+xml ; PDF et HEIC ne sont pas pris en charge
Limite stricte de 32 Mio : les fichiers plus gros sont refusés
La sortie par défaut commence par un préfixe comme data:image/png;base64, et le mode brut le retire
SVG à optimiser d'abord : minify-svg / le guide d'optimisation SVG, puis encoder
JWT, URL, JSON et PHP après Base64

L'encodage n'est souvent qu'une étape d'une session de débogage plus longue. Le hub d'encodage réunit les outils voisins.

JWT compact : décoder un JWT (en-tête et payload). Fabriquer un jeton de test avec JWT encode, ce qui n'est toujours pas une vérification
Chaînes de requête : URL encode / URL decode utilisent l'encodage en pourcentage, un autre alphabet
JSON décodé et minifié : formateur JSON, ou minification du JSON si vous compactez un payload d'API ; voir aussi optimiser le JSON d'une API REST
Blob de style WordPress : décoder le Base64, puis désérialiser PHP si les octets internes forment un tableau PHP sérialisé ; voir le guide de sérialisation PHP
Vue hub : outils d'encodage · aussi sur outils utilitaires

Quand le navigateur suffit, et quand il faut encore un REPL

Node Buffer, avec le même contrat UTF-8

Si la chaîne vit déjà dans un script, le Buffer de Node suit le même chemin UTF-8 puis Base64 que FastMinify. Utilisez base64url quand le consommateur est une bibliothèque JWT.

Exemple de base

const { Buffer } = require('node:buffer') const encoded = Buffer.from('café', 'utf8').toString('base64') // Y2Fmw6k= const urlSafe = Buffer.from('café', 'utf8').toString('base64url') // Y2Fmw6k const roundTrip = Buffer.from(encoded, 'base64').toString('utf8') // café
TextEncoder du navigateur plutôt que btoa pour du texte Unicode

Le couple natif btoa / atob est une API de chaîne binaire. Enveloppez-le avec TextEncoder/TextDecoder, sinon tout ce qui sort du Latin-1 sera corrompu. C'est exactement l'enveloppe que l'outil texte FastMinify applique déjà.

Exemple de base

const bytes = new TextEncoder().encode('café') let binary = '' bytes.forEach((b) => { binary += String.fromCharCode(b) }) const encoded = btoa(binary) const decodedBytes = Uint8Array.from(atob(encoded), (c) => c.charCodeAt(0)) const text = new TextDecoder().decode(decodedBytes)
openssl pour un fichier sur disque

Un PEM local, une fixture binaire, ou un job CI qui ne doit pas ouvrir un navigateur : openssl reste le bon outil. FastMinify ne remplace pas un pipeline qui calcule déjà des hash ou signe des fichiers sur disque.

Exemple de base

openssl base64 -in icon.png -out icon.b64 openssl base64 -d -in icon.b64 -out icon.png
FastMinify base64 / image-to-base64

Pas d'installation, rien n'est envoyé, du texte UTF-8 plus un convertisseur d'images dédié avec un plafond de 32 Mio et une option URL-safe. Les limites : l'outil texte n'est pas un encodeur de fichiers binaires, HEIC et PDF sont hors périmètre de l'outil image, et la vérification JWT est une autre page. Servez-vous-en pour inspecter, enseigner et dépanner une machine sans Node, puis gardez openssl ou Buffer en CI.

Conclusion

Base64 est un adaptateur ennuyeux et essentiel : des octets en entrée, un alphabet compatible ASCII en sortie, 33 % plus gros et entièrement réversible. FastMinify exécute cet adaptateur dans le navigateur. Il encode du texte UTF-8 avec un alphabet URL-safe en option, et un convertisseur d'images séparé (PNG, JPEG, GIF, WebP, SVG, 32 Mio) produit une data URI ou du Base64 brut sans injecter de SVG dans le DOM. Il ne chiffre pas, il ne calcule pas de hash, et il ne remplace ni jwt-verify ni un CDN. Encodez l'extrait, décodez la ligne de log, intégrez l'icône, puis arrêtez-vous. Commencez par le hub outils d'encodage, et ouvrez JWT decode quand la chaîne contient deux points.

Alignez URL-safe sur l'origine de la chaîne : activé pour les segments JWT, désactivé pour le MIME et les data URI
Ne traitez jamais Base64 comme du chiffrement ni comme un hash de mot de passe
Utilisez image-to-base64 pour les fichiers ; l'outil texte est de l'Unicode, pas des pixels
N'intégrez des data URI que si le fichier est assez petit pour absorber le surcoût de 33 %
JWT entier → jwt-decode ; politique de signature → jwt-verify
Partager cet article
Partager cet article: