Comment fonctionne le Base64
Le Base64 écrit n’importe quels octets avec 64 caractères sûrs, pour que des données binaires puissent transiter par des systèmes conçus pour le texte : e-mail, JSON, URL, en-têtes HTTP. Chaque groupe de 3 octets (24 bits) devient 4 caractères de 6 bits. Quand les données ne se divisent pas en groupes de 3, le dernier groupe est plus court et des signes = le complètent jusqu’à 4 caractères.
M a n 01001101 01100001 01101110 010011 010110 000101 101110 T W F u → TWFu
Le texte est d’abord transformé en octets, ici en UTF-8, l’encodage qu’attendent presque tous les systèmes. C’est pourquoi « é » devient w6k= ici ; la fonction btoa() du navigateur échoue sur de tels caractères. La variante URL-safe de la RFC 4648 remplace + et / par - et _, qui n’ont pas besoin d’être échappés dans les adresses et les noms de fichiers, et supprime souvent le remplissage. Les JSON Web Tokens l’utilisent.
Au décodage, la page accepte les deux alphabets, le remplissage manquant, les sauts de ligne et un préfixe d’URL data:. Si un caractère n’est pas du Base64, elle indique lequel et où. Si les octets ne forment pas un texte UTF-8 valide, ils sont affichés en hexadécimal, avec un téléchargement qui devine le type de fichier d’après ses premiers octets.
Exemple
Le mot « foobar » fait 6 octets : il s’encode en 8 caractères sans remplissage, Zm9vYmFy. « fooba » fait 5 octets et reçoit un « = » : Zm9vYmE=. « f » seul devient Zg==. Ce sont les valeurs de test de la RFC 4648.
Questions
Le Base64 est-il du chiffrement ?
Non. Le Base64 est un encodage : n’importe qui peut le décoder sans clé, exactement comme le fait cette page. Il ne cache rien. Un mot de passe dans un en-tête d’authentification basique ou dans un secret Kubernetes est seulement encodé en Base64 : protégez-le avec HTTPS et des règles d’accès, pas avec l’encodage.
Pourquoi le Base64 est-il plus gros que l’original ?
Chaque groupe de 3 octets devient 4 caractères : le résultat est donc environ 33 % plus grand, plus jusqu’à deux signes =. Les sauts de ligne tous les 76 caractères, comme dans l’e-mail, en ajoutent un peu plus. C’est le prix de n’utiliser que des caractères de texte sûrs.
Qu’est-ce que le Base64 URL-safe ?
La variante définie à la section 5 de la RFC 4648. Elle utilise - et _ à la place de + et /, qui ont un sens particulier dans les URL et les noms de fichiers, et omet souvent le remplissage =. Les JSON Web Tokens et de nombreuses API l’utilisent. Cette page décode les deux alphabets, et encode dans l’un ou l’autre avec l’option ci-dessus.
Pourquoi le décodage donne-t-il des caractères étranges ?
Soit les données ne sont pas du texte, comme une image, une archive ou une clé, soit le texte a été encodé avec un autre jeu de caractères que l’UTF-8. Cette page affiche les données binaires en hexadécimal et permet de les télécharger sous forme de fichier. Si quelques lettres sont fausses dans un texte par ailleurs lisible, la source a probablement utilisé Latin-1 ou Windows-1252.
Comment décoder du Base64 en ligne de commande ?
Sous Linux : echo 'Zm9vYmFy' | base64 -d. Sous macOS : base64 -D, ou base64 --decode sur les versions récentes. Pour encoder un fichier : base64 -w 0 file sous Linux pour une seule longue ligne, base64 -i file sous macOS. Dans PowerShell : [Convert]::FromBase64String('Zm9vYmFy').