Base64 : c'est quoi et à quoi ça sert vraiment ?
Vous avez peut-être vu des chaînes étranges comme SGVsbG8gV29ybGQ= dans du code, un email ou une URL, et vous vous êtes demandé ce que c'était. Ces chaînes apparemment aléatoires sont du Base64, un encodage omniprésent sur le web depuis les années 80. Dans cet article, on vous explique simplement ce qu'est Base64, à quoi ça sert vraiment, quand l'utiliser et quand l'éviter — avec des exemples concrets que vous pourrez tester dès maintenant.
Base64 : définition simple et sans jargon
Base64 est une méthode d'encodage qui transforme des données binaires en chaîne de caractères ASCII lisibles. Le nom "Base64" vient du fait qu'il utilise 64 caractères différents : 26 majuscules, 26 minuscules, 10 chiffres, plus + et /. Un 65e caractère, =, sert de remplissage.
Une idée clé à retenir : Base64 n'est PAS du chiffrement. C'est une transformation réversible, publique, sans clé secrète. N'importe qui peut décoder du Base64 en une seconde. C'est une représentation alternative des mêmes données, pas une protection.
Pourquoi Base64 existe : le problème historique
Dans les années 70-80, internet était surtout basé sur le protocole texte ASCII (7 bits par caractère). Les emails SMTP, les headers HTTP, et la plupart des protocoles ne pouvaient transporter que du texte lisible.
Problème : comment envoyer une image, un fichier binaire, ou du contenu en Unicode (accents, caractères chinois) à travers ces systèmes qui ne parlent qu'ASCII ?
Solution : encoder les données binaires en caractères ASCII sûrs, transmettre le texte, puis décoder à l'arrivée. Base64 est né pour ça, et malgré ses 40 ans, il reste massivement utilisé aujourd'hui.
Comment Base64 fonctionne, en 30 secondes
Sans entrer dans les maths :
- On prend les données binaires, octet par octet (8 bits)
- On regroupe les bits par paquets de 6 bits (pas 8)
- Chaque paquet de 6 bits a une valeur entre 0 et 63
- On remplace cette valeur par le caractère correspondant dans l'alphabet Base64
Résultat : 3 octets (24 bits) deviennent 4 caractères Base64. C'est pour ça qu'une chaîne Base64 est toujours environ 33 % plus longue que les données d'origine.
Exemple :
- Texte original :
Hi!(3 octets) - Base64 :
SGkh(4 caractères) - Texte original :
Hello World(11 octets) - Base64 :
SGVsbG8gV29ybGQ=(16 caractères, le=est du padding)
→ Testez avec notre encodeur/décodeur Base64 en ligne.
Les 6 cas d'usage concrets de Base64
1. Intégrer une image dans du CSS ou HTML (data URI)
Plutôt que de charger une image avec une requête HTTP séparée, vous pouvez l'inclure directement dans le code :
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...">
/* En CSS */
.icon {
background-image: url("data:image/svg+xml;base64,PHN2Zy4uLg==");
}
Avantage : zéro requête HTTP supplémentaire, l'image est intégrée. Inconvénient : +33 % de poids, pas cacheable séparément. À utiliser uniquement pour les très petites images (icônes < 2 Ko).
2. Transmettre des fichiers par email (MIME)
Les pièces jointes email sont encodées en Base64 depuis 30 ans. Quand vous envoyez une photo par Gmail, elle est :
- Convertie en Base64 par votre client mail
- Transmise comme texte dans le message SMTP
- Décodée par le client du destinataire
Vous ne voyez jamais ce processus : il est caché par les clients mail.
3. Stocker des données dans un cookie ou un JWT
Les JSON Web Tokens (JWT), standard d'authentification moderne, sont composés de 3 parties encodées en Base64 (plus précisément Base64URL, une variante) :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMiLCJuYW1lIjoiSmVhbiJ9.SIG
Les deux premières parties (header et payload) sont juste du JSON encodé en Base64. Elles ne sont PAS chiffrées — n'importe qui peut les décoder. C'est la 3e partie, la signature cryptographique, qui garantit l'intégrité.
4. Transmettre des caractères spéciaux dans une URL
Certains caractères Unicode ou binaires ne peuvent pas passer dans une URL. Base64 (variante URL-safe) permet de les transmettre :
https://site.com/viewer?data=eyJuYW1lIjoiSmVhbiJ9
5. Stocker des secrets ou configurations (avec précaution)
Certains systèmes (Kubernetes secrets, variables d'environnement dans CI/CD) utilisent Base64 pour stocker des tokens, clés SSH, certificats. Attention : ce n'est pas du chiffrement. Une clé SSH en Base64 est aussi exposée que la clé elle-même — il faut juste la décoder.
6. Intégrer des images dans du JSON ou XML
Quand une API REST doit retourner une image dans un champ JSON, la solution standard est l'encoder en Base64 :
{
"user": "jean",
"avatar": "iVBORw0KGgoAAAANSUhEUgAAAAE...",
"avatarType": "image/png"
}
Base64 vs alternatives : quand utiliser quoi ?
| Besoin | Bonne solution | Pas Base64 parce que |
|---|---|---|
| Cacher un mot de passe | Hashage (bcrypt, Argon2) | Base64 est trivialement décodable |
| Protéger des données | Chiffrement (AES, RSA) | Base64 n'est PAS du chiffrement |
| Hash de fichier (intégrité) | SHA-256 | Base64 préserve toute l'info, un hash la réduit |
| Encoder du texte Unicode pour URL | encodeURIComponent() (pourcent-encoding) |
Plus lisible et plus compact que Base64 |
| Compresser des données | Gzip, Brotli, Zstd | Base64 augmente la taille de 33 % |
Les variantes de Base64 à connaître
Base64 classique (RFC 4648)
Alphabet A-Z a-z 0-9 + /, padding avec =. C'est celui utilisé dans les emails, data URI, etc.
Base64 URL-safe
Même principe, mais + devient - et / devient _. Cette variante permet d'utiliser Base64 dans des URLs sans problème d'échappement. C'est celle utilisée par les JWT.
Base32, Base58, Base85
Variantes moins répandues. Base32 utilise 32 caractères (plus lisibles, pas de confusion 0/O 1/l). Base58 (Bitcoin) exclut les caractères ambigus. Base85 (Adobe) est plus compact (+25 % vs +33 % pour Base64) mais moins courant.
Erreurs classiques autour de Base64
"J'ai encodé mon mot de passe en Base64, c'est sécurisé"
NON. C'est littéralement la première chose qu'un attaquant va essayer. Base64 est une obfuscation, pas une protection. Pour stocker un mot de passe, utilisez un hash adapté (bcrypt, Argon2) avec un sel.
"J'ai mis ma clé API en Base64 dans mon code"
Même problème. Un simple atob() en JavaScript ou base64 -d en bash récupère la clé. Pour des secrets, utilisez des variables d'environnement ou un vault (HashiCorp Vault, AWS Secrets Manager).
"Je voulais compresser mes données, j'ai mis en Base64"
Mauvaise direction : Base64 augmente la taille de 33 %. Pour compresser, utilisez gzip (HTTP Content-Encoding), Brotli (plus efficace encore) ou Zstd.
"Mon JSON contient une image en Base64 et pèse 10 Mo"
C'est normal : une image de 7 Mo en Base64 fait ~9,5 Mo. Pour des APIs avec beaucoup d'images, préférez multipart/form-data ou un lien vers un storage (S3, CDN) plutôt qu'intégrer l'image dans le JSON.
Encoder/décoder en pratique selon votre langage
JavaScript (navigateur)
const encoded = btoa("Hello World"); // "SGVsbG8gV29ybGQ="
const decoded = atob("SGVsbG8gV29ybGQ="); // "Hello World"
Attention : btoa/atob ne supportent pas Unicode directement. Pour des caractères accentués, passer par TextEncoder.
Python
import base64
encoded = base64.b64encode(b"Hello").decode() # "SGVsbG8="
decoded = base64.b64decode(encoded).decode() # "Hello"
PHP
$encoded = base64_encode("Hello World"); // "SGVsbG8gV29ybGQ="
$decoded = base64_decode($encoded); // "Hello World"
Bash
echo -n "Hello" | base64 # SGVsbG8=
echo "SGVsbG8=" | base64 -d # Hello
Questions fréquentes
Non, absolument pas. C'est un encodage réversible sans clé secrète. N'importe qui peut décoder du Base64 instantanément avec un outil en ligne ou une commande système. Pour la sécurité, utilisez du vrai chiffrement (AES, RSA).
C'est du padding (remplissage). Base64 encode par groupes de 3 octets en 4 caractères. Si votre donnée n'est pas un multiple de 3 octets, on ajoute 1 ou 2 = à la fin pour compléter. Exemple : 1 octet = 2 caractères Base64 + ==.
C'est inhérent à la méthode : 3 octets (24 bits) deviennent 4 caractères Base64, chacun codé sur 8 bits ASCII. Soit 24 bits → 32 bits, d'où le ratio 4/3 = +33 %. C'est le prix à payer pour rendre du binaire transportable en texte.
Oui techniquement, mais généralement déconseillé pour les fichiers > 1 Mo. La chaîne devient énorme, les navigateurs peuvent avoir du mal, et les performances chutent. Pour les images par exemple, préférez une URL classique sauf pour les icônes < 2 Ko.
URL-encoding transforme des caractères spéciaux un par un (espace = %20, & = %26). Base64 transforme des données binaires entières. URL-encoding reste lisible, Base64 devient une chaîne incompréhensible pour un humain. On utilise l'URL-encoding pour des strings, Base64 pour du binaire.
Encodez ou décodez du Base64 instantanément
Ouvrir l'encodeur/décodeur Base64Traitement dans votre navigateur. Support Unicode complet.
Pour aller plus loin
- Encodeur / Décodeur Base64
- Convertir Image ↔ Base64 — pour les data URI
- Formateur JSON — pour visualiser un JWT décodé