Qu’est-ce que le Base64 ?
Le Base64 permet d’écrire n’importe quelle donnée binaire — une image, un PDF, une clé de chiffrement — avec seulement 64 caractères « sûrs » : A–Z, a–z, 0–9, + et /, plus = pour le remplissage. Le résultat étant du texte ASCII pur, il traverse les systèmes conçus pour le texte : e-mail, JSON, XML, HTML, URL et en-têtes HTTP.
Le Base64 est un encodage, pas un chiffrement. Tout le monde peut le décoder : il ne protège aucun secret, il rend simplement les données transportables. Le format est défini par la RFC 4648 ; l’e-mail (MIME) utilise le même alphabet avec un saut de ligne tous les 76 caractères (RFC 2045).
Comment fonctionne l’encodage Base64
L’encodeur prend 3 octets (24 bits) à la fois, les découpe en quatre groupes de 6 bits et associe chaque groupe (0–63) à un caractère de l’alphabet. Voici le mot « Man » :
| Étape | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| Texte | M | a | n | |
| Valeur de l’octet | 77 | 97 | 110 | |
| Bits (8 par octet) | 01001101 | 01100001 | 01101110 | |
| Bits (6 par caractère) | 010011 | 010110 | 000101 | 101110 |
| Index (0–63) | 19 | 22 | 5 | 46 |
| Base64 | T | W | F | u |
« Man » devient donc TWFu. Si la longueur n’est pas un multiple de trois, le dernier groupe est complété par des bits à zéro et un ou deux = sont ajoutés : « Ma » → TWE=, « M » → TQ==.
Les variantes du Base64
| Variante | Caractères / règle | Utilisée dans |
|---|---|---|
| Standard (RFC 4648 §4) | A–Z a–z 0–9 + / et = | API JSON, XML, bases de données, la plupart des langages |
| URL-safe (Base64URL, §5) | A–Z a–z 0–9 - _ généralement sans = | Jetons JWT, URL, noms de fichiers, OAuth, WebAuthn |
| MIME (RFC 2045) | Standard, 76 caractères max. par ligne, CRLF | Pièces jointes d’e-mail (SMTP), S/MIME |
| PEM (RFC 7468) | Standard, 64 caractères par ligne + lignes BEGIN/END | Certificats TLS, clés SSH et PGP |
| Data URI (RFC 2397) | data:[type];base64,[données] | Images et polices intégrées au HTML, CSS, SVG, e-mails |
Usages courants
- Intégrer des images dans du HTML, du CSS ou des e-mails en Data URI pour économiser une requête HTTP (idéal pour les petites icônes de moins de ~10 Ko).
- Envoyer des fichiers via des API JSON ou XML — par exemple un document ou une signature dans une requête REST.
- Lire des jetons JWT : l’en-tête et la charge utile sont du JSON encodé en Base64URL. Collez une partie ici pour la lire.
- Authentification HTTP Basic : l’en-tête
Authorizationcontientutilisateur:motdepasseen Base64. - Certificats et clés (fichiers PEM), secrets Kubernetes et de nombreuses valeurs de configuration sont stockés en Base64.
De combien le Base64 augmente-t-il la taille ?
La sortie Base64 est toujours environ 33 % plus grande que l’entrée : chaque groupe de 3 octets devient 4 caractères. La longueur exacte est de 4 × ⌈n / 3⌉ caractères (sans sauts de ligne). Avec les sauts de ligne MIME, c’est environ 37 %.
| Original | Base64 | Avec sauts de ligne MIME |
|---|---|---|
| 1 Ko (1 024 octets) | 1 368 caractères | ≈ 1,4 Ko |
| 100 Ko | ≈ 133 Ko | ≈ 137 Ko |
| 1 Mo | ≈ 1,33 Mo | ≈ 1,37 Mo |
| 10 Mo | ≈ 13,3 Mo | ≈ 13,7 Mo |
Le Base64 est-il sécurisé ?
Non — le Base64 ne cache rien. Ne l’utilisez jamais pour « protéger » des mots de passe ou des données personnelles ; utilisez un vrai chiffrement (AES, TLS…). Ce qui est sûr, c’est cet outil : vos données sont encodées et décodées localement dans votre navigateur et ne sont jamais envoyées — important pour les jetons, les clés ou les fichiers clients (RGPD).
Le Base64 dans le code
Astuce : en JavaScript, btoa() n’accepte que le Latin-1 et échoue sur les emoji ou « € » — convertissez d’abord le texte en octets UTF-8, comme ci-dessous.
| Langage | Encoder | Décoder |
|---|---|---|
| JavaScript | btoa(String.fromCharCode(...new TextEncoder().encode(s))) | new TextDecoder().decode(Uint8Array.from(atob(b), c => c.charCodeAt(0))) |
| Node.js | Buffer.from(s, 'utf8').toString('base64') | Buffer.from(b, 'base64').toString('utf8') |
| Python | base64.b64encode(s.encode()).decode() | base64.b64decode(b).decode() |
| PHP | base64_encode($s) | base64_decode($b, true) |
| Java | Base64.getEncoder().encodeToString(bytes) | Base64.getDecoder().decode(b) |
| C# | Convert.ToBase64String(bytes) | Convert.FromBase64String(b) |
| Go | base64.StdEncoding.EncodeToString(data) | base64.StdEncoding.DecodeString(b) |
| Linux / macOS | base64 -w 0 file.bin | base64 -d file.txt > file.bin |
| PowerShell | [Convert]::ToBase64String([IO.File]::ReadAllBytes("f.bin")) | [IO.File]::WriteAllBytes("f.bin", [Convert]::FromBase64String($b)) |
Astuces
- Clavier : Ctrl+Entrée convertit, Ctrl+Maj+Entrée inverse entrée et résultat, Ctrl+S télécharge (⌘ sur Mac).
- Accents illisibles après décodage (ex. « é » au lieu de « é ») ? Les données ont probablement été créées avec un autre encodage — choisissez Windows-1252 ou ISO-8859-1 dans le menu Encodage.
- JWT : collez seulement la partie du milieu (entre les deux points) et décodez — l’alphabet URL-safe et l’absence de remplissage sont gérés automatiquement.
- Captures d’écran : appuyez sur Ctrl+V n’importe où sur la page pour transformer une image copiée en Data URI.
- Les grandes images alourdissent le HTML et le CSS. Au-delà de quelques kilo-octets, un fichier image normal (compressé avec notre compresseur d’images) se charge plus vite.