Encoder du texte et des fichiers en Base64

Transformez du texte, des octets bruts ou n’importe quel fichier en Base64. Choisissez le jeu de caractères attendu par le destinataire, conservez ou supprimez le remplissage =, et coupez les lignes à 76 ou 64 caractères pour MIME et PEM.

Fonctionne entièrement dans votre navigateur. Aucune donnée n’est envoyée.

Mode d’emploi

  1. Saisissez ou collez le texte à encoder, passez l’entrée en Hexa pour encoder des octets bruts, ou cliquez sur « Ouvrir un fichier » pour encoder un fichier.
  2. Laissez « Encodage du texte » sur UTF-8, sauf si le système destinataire attend un autre jeu de caractères.
  3. Réglez les options : gardez la variante Standard dans la plupart des cas, désactivez le remplissage si le destinataire n’en veut pas, et activez le retour à la ligne à 76 (MIME) ou 64 (PEM) caractères si nécessaire.
  4. Copiez la sortie Base64 ou téléchargez-la dans un fichier.

Fonctionnement de l’encodage Base64

L’encodeur lit l’entrée par blocs de trois octets. Ces 24 bits sont découpés en quatre groupes de 6 bits, et chaque valeur de 6 bits (0 à 63) désigne un caractère : A-Z pour 0 à 25, a-z pour 26 à 51, 0-9 pour 52 à 61, puis + et /. Trois octets en entrée, quatre caractères en sortie : c’est pourquoi le Base64 est environ 33 % plus volumineux que les données d’origine.

Texte    M        a        n
Octets   77       97       110
Binaire  01001101 01100001 01101110
6 bits   010011 010110 000101 101110
Indice   19     22     5      46
Base64   T      W      F      u

Remplissage et longueur de la sortie

Lorsque la longueur de l’entrée n’est pas un multiple de trois, le dernier groupe est incomplet. Un octet restant donne deux caractères suivis de == ; deux octets restants donnent trois caractères et un =. Une sortie avec remplissage compte donc toujours 4 × ceil(n / 3) caractères pour n octets en entrée.

Le remplissage ne contient aucune donnée. Les JSON Web Tokens, les paramètres d’URL et de nombreuses API s’en passent : désactivez donc le remplissage lorsque le destinataire attend une sortie sans remplissage. Pour les liens et les noms de fichiers, choisissez la variante compatible URL ou utilisez la page Base64URL : toutes deux remplacent + et / par - et _.

Retour à la ligne pour MIME et PEM

Par défaut, la sortie tient sur une seule longue ligne, ce dont ont besoin JSON, les data URI et les en-têtes HTTP. Deux formats exigent des sauts de ligne :

  • MIME, 76 caractères. Les pièces jointes d’e-mail envoyées avec Content-Transfer-Encoding: base64 ne doivent pas comporter de lignes de plus de 76 caractères (RFC 2045). Cette option termine les lignes par CRLF, comme l’exige MIME.
  • PEM, 64 caractères. Les certificats et les clés placés entre les lignes -----BEGIN et -----END utilisent des lignes de 64 caractères (RFC 7468). Cette option utilise des fins de ligne LF.

Jeux de caractères et fichiers

Base64 encode des octets, pas des lettres : le texte est donc d’abord converti en octets selon un jeu de caractères. La lettre é occupe deux octets en UTF-8 mais un seul en ISO-8859-1 ou Windows-1252, si bien qu’un même texte produit un Base64 différent. UTF-8 est le bon choix pour le Web, JSON et presque toutes les API modernes ; ne choisissez GBK, Shift_JIS, Windows-1251 ou un autre jeu de caractères que pour correspondre à un système ancien.

Les fichiers sont encodés tels qu’ils sont stockés, sans aucune conversion de jeu de caractères. Pour des images accompagnées d’extraits HTML et CSS prêts à l’emploi, voir Image en Base64 ; pour un data URI avec le type MIME détecté, utilisez Fichier en Base64.

Spécifications

AlphabetA-Z a-z 0-9 + /
Taille de sortie4 caractères pour 3 octets (environ 133 %)
RemplissageComplété par = jusqu’à un multiple de 4 caractères
NormeRFC 4648, section 4
Sensible à la casseOui

Exemples

Entrée (UTF-8)Sortie
Hello, World!SGVsbG8sIFdvcmxkIQ==
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

Questions fréquentes

Pourquoi ma sortie Base64 diffère-t-elle de celle d’un autre encodeur ?
Presque toujours parce que les octets d’entrée sont différents. Les causes habituelles sont un saut de ligne final (la commande shell echo en ajoute un ; utilisez printf '%s' ou echo -n), un autre jeu de caractères, des fins de ligne Windows dans le texte, ou des réglages différents de remplissage, d’alphabet ou de retour à la ligne. Les mêmes octets avec les mêmes options donnent toujours la même sortie.
Comment encoder du texte Unicode en Base64 en JavaScript ?
btoa() n’accepte que les caractères jusqu’à U+00FF et lève une erreur pour tous les autres. Convertissez d’abord la chaîne en octets UTF-8, par exemple btoa(String.fromCharCode(...new TextEncoder().encode(str))). En Node.js, utilisez Buffer.from(str, 'utf8').toString('base64').
Comment encoder en Base64 en ligne de commande ?
Exécutez printf '%s' 'your text' | base64 sous Linux ou macOS. Le base64 de GNU coupe la sortie à 76 caractères par défaut (ajoutez -w 0 pour obtenir une seule ligne), et openssl base64 la coupe à 64 (ajoutez -A).
L’encodage Base64 est-il une forme de chiffrement ?
Non. Base64 n’utilise aucune clé et n’importe qui peut l’inverser avec un décodeur Base64. Il sert à faire transiter des données binaires par des canaux qui n’acceptent que du texte, pas à dissimuler des informations.
De combien Base64 augmente-t-il la taille de mes données ?

Chaque groupe de 3 octets devient 4 caractères, avec un arrondi au groupe complet supérieur : la sortie est donc environ 33 % plus volumineuse. Le retour à la ligne MIME ajoute deux octets supplémentaires (CRLF) tous les 76 caractères.