Base64 est une façon de représenter des données binaires arbitraires sous forme de texte composé uniquement de lettres, de chiffres et des caractères +, / et =. Il ne compresse ni ne chiffre rien : le résultat est environ un tiers plus volumineux, et quiconque connaît l'algorithme peut lire le contenu d'origine.
Comment fonctionne l'encodage
Les octets d'entrée sont regroupés par trois (24 bits) et divisés en quatre blocs de six bits. Chaque bloc correspond à un caractère de l'alphabet Base64 (A–Z, a–z, 0–9, +, /). Si la longueur des données n'est pas un multiple de trois octets, un caractère de remplissage = est ajouté à la fin.
À quoi ça sert
De nombreux protocoles et formats — e-mail (MIME), URL, JSON, XML — sont conçus pour du texte et ne gèrent pas correctement des octets « bruts » : octets nuls, caractères de contrôle ou séquences qui entrent en conflit avec la syntaxe du format. Base64 contourne ce problème en transformant n'importe quelle donnée binaire en texte sûr.
Cas d'usage courants
- Pièces jointes d'e-mail via MIME.
- Envoi d'images ou de petits fichiers dans une API JSON.
- Stockage de données binaires dans des champs texte de base de données ou de configuration.
- Encodage des parties header et payload d'un JWT.
Ce que Base64 n'est PAS
Ce n'est ni du chiffrement ni du hachage. N'importe qui peut décoder une chaîne Base64 pour retrouver les données d'origine sans clé ni mot de passe : c'est uniquement un format de représentation, pas une mesure de sécurité.
Alphabet standard et alphabet URL-safe
L'alphabet classique de Base64 utilise les caractères + et /, qui ont une signification particulière dans les URL et les noms de fichiers. Pour ces cas, il existe la variante Base64URL, où + est remplacé par - et / par _. Si le résultat d'un encodage standard est inséré dans une URL sans percent-encoding supplémentaire, les caractères + et / peuvent altérer l'adresse ou entrer en conflit avec les séparateurs de chemin.
Erreur fréquente : un remplissage tronqué ou « cassé »
Le caractère = à la fin d'une chaîne n'est pas anodin : c'est une partie de l'encodage qui indique combien d'octets manquent dans le dernier bloc. Si l'on copie une chaîne Base64 de façon incomplète ou qu'on retire les caractères de remplissage à la main, le décodeur renvoie une erreur ou un résultat tronqué. Certains systèmes (comme JWT) omettent volontairement le =, et il faut alors restaurer la longueur avant de décoder.