Comment fonctionne le Base64
Le Base64 réécrit n'importe quelle suite d'octets avec 64 caractères sans risque : les 26 majuscules, les 26 minuscules, les 10 chiffres, puis + et /. Il sert à faire passer des données binaires (une image, une pièce jointe, une clé) par un canal prévu pour du texte : un e-mail, un fichier JSON, une adresse, un attribut HTML. L'alphabet et les règles sont fixés par la RFC 4648.
3 × 8 = 24 bits4 × 6 = 24 bitsOn prend les octets trois par trois, on découpe leurs 24 bits en quatre paquets de 6 bits, et chaque paquet (un nombre de 0 à 63) devient un caractère : 0 donne A, 25 donne Z, 26 donne a, 52 donne 0, 62 donne +, 63 donne /. Quand il reste un ou deux octets à la fin, on complète par des zéros et on ajoute un ou deux signes = pour que le total soit un multiple de 4.
Un texte est d'abord converti en octets. L'outil utilise l'UTF-8, l'encodage du web : une lettre sans accent tient sur un octet, « é » sur deux, un emoji sur quatre. C'est pourquoi le Base64 d'un texte accentué est plus long que le texte.
Trois exemples
L, y et c valent les octets 4C, 79 et 63, soit 010011 000111 100101 100011 en paquets de 6 bits : 19, 7, 37 et 35, c'est-à-dire T, H, l et j. Restent o et s, deux octets seulement : trois caractères et un =.
En UTF-8, « é » s'écrit avec deux octets, C3 et A9 : trois caractères Base64 et un =. Un outil qui lirait « é » en Latin-1 (un seul octet, E9) donnerait 6Q== : c'est la cause la plus fréquente des accents cassés au décodage.
L'emoji occupe quatre octets en UTF-8 (F0 9F 98 80) : six caractères utiles, complétés par deux =.
La variante URL-safe
Dans une adresse web, + et / ont un sens, et = sépare un paramètre de sa valeur. La RFC 4648 définit donc un second alphabet, dit « URL and filename safe », où - remplace + et _ remplace /. Le signe = final peut y être omis. Exemple : « a>? » donne YT4/ en Base64 standard et YT4_ en variante URL-safe.
Au décodage, l'outil accepte les deux alphabets et retrouve lui-même les = manquants : inutile de préciser d'où vient le texte.
Encoder un fichier : la data URI
Le bouton « Encoder un fichier… » lit un fichier de votre appareil, sans l'envoyer, et donne son Base64, précédé par défaut du préfixe data:type;base64,. Cette data URI s'emploie à la place d'une adresse d'image dans du HTML ou du CSS, pour intégrer une petite icône dans la page elle-même. L'outil s'arrête à 2 Mo (un choix de l'outil : au-delà, le résultat devient trop long pour être copié et collé).
Comptez un tiers de plus : 3 octets deviennent 4 caractères. Un fichier de 30 000 octets donne 40 000 caractères de Base64. Pour une grosse image, un fichier séparé reste plus léger.
Quand le décodage échoue
L'outil ignore les espaces et les retours à la ligne, qu'un Base64 coupé en lignes ou un copier-coller ajoutent souvent. Il signale en revanche :
- un caractère étranger (une apostrophe, un point, un accent) : le texte n'est pas du Base64, ou il a été copié avec ce qui l'entourait ;
- une longueur impossible : hors
=, il ne reste jamais 1 caractère seul après les groupes de 4, c'est le signe d'un texte tronqué ; - des octets qui ne sont pas du texte : le Base64 est valide mais code un fichier. L'outil reconnaît les images PNG, JPEG, GIF et WebP, les PDF et les archives ZIP par leurs premiers octets.
C'est un simple changement d'écriture, sans clé : n'importe qui le décode en un clic. Un mot de passe ou un jeton « caché » en Base64 dans un fichier de configuration est lisible par quiconque y accède.
Questions fréquentes
Pourquoi mes accents sont-ils cassés après décodage ?
Le texte a été encodé dans un autre encodage que celui utilisé pour le décoder. Cet outil lit et écrit l'UTF-8, l'encodage du web : « é » y donne w6k=. Un Base64 produit depuis du Latin-1 (« é » donne 6Q==) n'est pas de l'UTF-8 valide, et l'outil le signale au lieu d'afficher des caractères faux.
À quoi servent les signes = à la fin ?
Ils complètent le dernier groupe de 4 caractères quand le nombre d'octets n'est pas un multiple de 3 : un = s'il reste deux octets, deux = s'il en reste un. Ils ne portent aucune donnée, et l'outil les retrouve s'ils manquent.
Quelle différence entre Base64 et Base64 URL-safe ?
Seulement deux caractères : - remplace + et _ remplace /, deux signes qui ont un sens dans une adresse web. Le = final est souvent retiré. Les deux variantes sont décrites par la RFC 4648, et l'outil décode l'une comme l'autre.
Le Base64 est-il un chiffrement ?
Non. C'est une autre façon d'écrire les mêmes octets, sans clé ni secret : n'importe qui le décode. Il ne protège pas un mot de passe.
Pourquoi le Base64 est-il plus long que le texte ?
Chaque groupe de 3 octets devient 4 caractères, soit un tiers de plus. Et un caractère accentué occupe déjà 2 octets en UTF-8, un emoji 4, avant même l'encodage.
Mon texte ou mon fichier est-il envoyé quelque part ?
Non. L'encodage et le décodage se font dans votre navigateur, et rien de ce que vous saisissez n'apparaît dans l'adresse de la page.
Une erreur ? Signalez-la, nous la corrigeons.