Le Base64 en une minute
Les ordinateurs stockent tout sous forme d'octets, et un octet peut prendre 256 valeurs différentes. Beaucoup de protocoles et de formats anciens, comme l'e-mail, les URL, les chaînes JSON et les en-têtes HTTP, ont été conçus pour du texte lisible et peuvent abîmer ou refuser les octets qui sortent d'un petit ensemble sûr. Le Base64 règle ce problème en réécrivant les octets avec des caractères qui passent partout.
L'outil ci-dessous encode le texte en Base64 pendant que vous tapez et le décode d'un clic sur Décoder. Le texte est d'abord converti en UTF-8 : les lettres accentuées, les autres alphabets et les emoji reviennent donc exactement comme ils étaient. La ligne d'état indique combien d'octets de texte sont devenus combien d'octets de Base64.
Essayez ici : Encoder en Base64
Ouvrir la page complète de l'outilComment fonctionne l'encodage, étape par étape
Le Base64 prend l'entrée par paquets de 3 octets (24 bits) et découpe ces 24 bits en quatre groupes de 6 bits. Six bits peuvent contenir un nombre de 0 à 63, et chaque nombre est cherché dans un alphabet fixe : 0 à 25 correspondent à A à Z, 26 à 51 à a à z, 52 à 61 à 0 à 9, 62 à + et 63 à /.
Prenons le mot Man. Ses octets sont 77, 97 et 110, soit 01001101 01100001 01101110 en binaire. Regroupés en morceaux de 6 bits, on obtient 010011 010110 000101 101110, c'est-à-dire 19, 22, 5 et 46, qui correspondent à T, W, F et u. Man devient donc TWFu.
Quand la longueur de l'entrée n'est pas un multiple de 3, le dernier groupe est complété par du remplissage (padding). Un octet restant donne deux caractères suivis de ==, deux octets restants donnent trois caractères suivis de =. C'est pourquoi Ma s'encode en TWE= et M en TQ==, et pourquoi Hello (5 octets) devient SGVsbG8=.
Pourquoi le Base64 est 33 % plus lourd
Quatre caractères de sortie portent l'information de trois octets d'entrée : le poids est donc multiplié par 4/3, plus jusqu'à deux caractères de remplissage. Certains systèmes insèrent aussi un saut de ligne tous les 76 caractères (MIME pour l'e-mail) ou tous les 64 caractères (certificats PEM), ce qui ajoute encore quelques pour cent.
| Poids d'origine | Poids en Base64 | Avec des lignes de 76 caractères |
|---|---|---|
| 3 octets | 4 octets | 4 octets |
| 1 Ko (1 024 octets) | 1 368 octets | environ 1,4 Ko |
| 100 Ko | environ 133 Ko | environ 137 Ko |
| 1 Mo | environ 1,33 Mo | environ 1,37 Mo |
| Pièce jointe de 10 Mo | environ 13,3 Mo | environ 13,7 Mo |
Où l'on rencontre le Base64
- Les pièces jointes des e-mails : MIME encode les fichiers en Base64 avec des lignes de 76 caractères. C'est pourquoi un fichier de 20 Mo peut être refusé par une messagerie qui limite les messages à 25 Mo : une fois encodé, il dépasse 27 Mo.
- Les data URI : images, polices et icônes intégrées dans du HTML ou du CSS sous la forme data:image/png;base64, suivi du fichier encodé.
- L'authentification HTTP Basic : l'en-tête Authorization: Basic suivi de identifiant:motdepasse en Base64. N'importe qui voyant l'en-tête peut le lire : ce n'est sûr qu'en HTTPS.
- Les JSON Web Tokens : l'en-tête et le contenu sont du JSON encodé en Base64url, ce qui explique qu'un JWT commence par eyJ (l'encodage des caractères {").
- Les certificats et les clés : les fichiers PEM contiennent du Base64 entre des lignes BEGIN et END.
- Les API et la configuration : données binaires dans des champs JSON, secrets Kubernetes, variables d'environnement et exports de bases de données.
Les variantes du Base64 : standard, compatible URL et MIME
Le Base64 standard (RFC 4648) utilise + et / et complète avec =. Ces trois caractères ont un sens particulier dans les adresses web : il existe donc une variante compatible URL, souvent appelée Base64url, qui les remplace par le tiret et le tiret bas et supprime généralement le remplissage. Les JWT et beaucoup d'API web l'utilisent. Dans l'outil, activez Compatible URL pour obtenir cette forme ; le décodeur accepte les deux formes et le remplissage manquant.
Le Base64 MIME, utilisé dans l'e-mail, est du Base64 standard découpé en lignes de 76 caractères au maximum. Activez Lignes de 76 caractères quand vous avez besoin d'une sortie pour le corps d'un e-mail ou un fichier de type PEM.
Le Base64 n'est pas un chiffrement
Il n'y a ni clé ni secret. N'importe qui voyant cGFzc3dvcmQxMjM= peut le décoder en password123 en une seconde. Traitez les identifiants, jetons et configurations encodés en Base64 exactement comme du texte en clair : ne les publiez pas dans des dépôts publics, ne les collez pas sur des sites dont vous n'êtes pas sûr et n'utilisez pas le Base64 pour cacher quoi que ce soit. Les secrets Kubernetes, par exemple, sont encodés en Base64 par défaut, pas chiffrés.
Si vous avez besoin de confidentialité, utilisez un vrai chiffrement (comme AES via une bibliothèque sérieuse), puis, si le texte chiffré doit circuler sous forme de texte, encodez-le en Base64.
Problèmes fréquents au décodage
- Lettres accentuées illisibles : le texte a été encodé avec un autre jeu de caractères. En JavaScript, btoa n'accepte que les caractères jusqu'au code 255 et les encode en Latin 1 : é devient 6Q== au lieu de la forme UTF-8 w6k=, et des caractères comme le signe euro provoquent une erreur. Utilisez un encodeur qui gère l'UTF-8, comme l'outil de cette page.
- Erreurs de caractère invalide : la chaîne contient des espaces, des sauts de ligne ou des caractères de la variante compatible URL qu'un décodeur strict refuse. Cet outil ignore les sauts de ligne et accepte les deux alphabets.
- La longueur n'est pas un multiple de 4 : le remplissage a été supprimé. Ajoutez des = jusqu'à ce que la longueur soit divisible par 4, ou utilisez un décodeur qui s'en charge.
- Le résultat ressemble à des symboles aléatoires : les données sont binaires, comme une image, un PDF ou un ZIP. L'outil indique alors qu'il s'agit de données binaires, reconnaît le type de fichier quand il le peut et vous permet de l'enregistrer avec Télécharger.
Encoder en ligne de commande
Sous Linux, base64 fichier.txt encode et base64 -d fichier.b64 décode. Sur macOS, la même commande base64 existe ; les anciennes versions utilisent -D pour décoder. Dans Windows PowerShell, [Convert]::ToBase64String([IO.File]::ReadAllBytes("fichier.bin")) encode un fichier, et certutil -encode entree sortie fonctionne dans l'Invite de commandes mais ajoute des lignes d'en-tête BEGIN et END. Pour des vérifications rapides sur du texte, l'outil dans le navigateur est plus rapide et ne laisse pas les données dans l'historique de votre terminal.