Skip to main content
Aller au contenu principal
Développement8 avril 2026 13 min de lecture

Encodage Base64 expliqué : quand et comment

Base64 transforme du binaire en texte ASCII sûr, mais ce n'est pas du chiffrement et cela coûte 33 % de taille. Un guide complet sur son fonctionnement, les variantes et quand chacune convient.

Encodez ou décodez Base64, Base64URL, Hex et plus avec l'encodeur/décodeur – localement dans votre navigateur.

Ce qu'est Base64

Base64 est un encodage binaire-texte qui représente des données binaires avec 64 caractères ASCII imprimables : A-Z, a-z, 0-9, + et /.

Il existe parce que de nombreux canaux – e-mail, URL, JSON, en-têtes HTTP – ont été conçus pour le texte, et que les octets binaires peuvent être altérés, scindés ou mal interprétés pendant le transport.

L'encodage n'est pas du chiffrement. N'importe qui peut décoder du Base64 instantanément ; cela change la représentation, pas la confidentialité. Traitez Base64 comme un emballage et utilisez un vrai chiffrement dès que le secret compte.

Comment fonctionne l'encodage

Base64 traite l'entrée par groupes de 3 octets (24 bits). Chaque groupe devient 4 caractères de 6 bits, mappés via l'alphabet Base64.

Lorsque la longueur de l'entrée n'est pas un multiple de 3, le dernier groupe est complété par un ou deux caractères « = » pour que la longueur de sortie reste un multiple de 4.

Chaque groupe de 3 octets devient 4 caractères, c'est pourquoi la sortie encodée fait environ 4/3 de la taille de l'entrée – un surcoût de 33 % avant même les sauts de ligne ou délimiteurs.

# 3 bytes: 0x4d 0x61 0x6e -> 'Man'
# 24 bits split into 6-bit groups:
# 010011 010110 000101 101110 -> T W F u
# JavaScript
globalThis.btoa('Man'); // 'TWFu'
globalThis.atob('TWFu'); // 'Man'

Base64 standard vs Base64URL

L'alphabet standard utilise + et /, ce qui pose problème dans les URL : + est interprété comme un espace dans les chaînes de requête et / scinde les segments de chemin.

Base64URL (RFC 4648 §5) remplace + par - et / par _, et omet le rembourrage dans de nombreuses implémentations. C'est la variante qu'utilisent les segments JWT.

Mélanger les deux est un bug d'intégration classique : une chaîne Base64 standard casse dans une URL, et une chaîne Base64URL peut échouer dans des outils qui attendent l'alphabet standard. Sachez quelle variante votre canal exige.

PropriétéBase64 standardBase64URL
AlphabetA-Z a-z 0-9 + /A-Z a-z 0-9 - _
RembourrageRequis (=)Souvent omis
Sûr dans les URLNonOui
Utilisé parE-mail, plupart des outilsJWT, API web, noms de fichiers

Quand Base64 est le bon outil

  • Intégrer de petites images ou icônes en HTML/CSS sous forme de data URIs
  • Transmettre des pièces jointes binaires via des protocoles texte uniquement (e-mail, champs JSON)
  • Représenter des éléments cryptographiques – clés, signatures, hash – dans la configuration et les en-têtes
  • Segments d'en-tête et payload JWT (Base64URL)
  • Stocker du binaire dans des formats texte comme JSON ou CSV
  • Débogage – décoder un payload d'une ligne de journal pour l'inspecter

Quand ne PAS utiliser Base64

Base64 coûte 33 % de taille et ajoute du travail CPU. Pour les gros payloads binaires, préférez les canaux binaires : téléversements multipart, tableaux typés ou corps HTTP bruts.

Pour les images, une data URI n'est efficace que pour de très petits éléments. Au-delà de quelques kilo-octets, le surcoût de taille plus l'inflation Base64 nuit généralement plus que l'économie d'une requête.

Et surtout : Base64 n'est pas une mesure de sécurité. Les secrets encodés sont trivialement lisibles – si vous avez besoin de confidentialité, chiffrez d'abord, puis encodez le texte chiffré si le canal exige du texte.

Avertissement: Ne traitez jamais Base64 comme de l'obfuscation pour des secrets, et ne l'utilisez jamais à la place d'un schéma de chiffrement authentifié. « Encodé » n'est pas « chiffré ».

Encoder en pratique

// Binary -> Base64 in the browser
const bytes = new Uint8Array([77, 97, 110]); // 'Man'
let binary = '';
bytes.forEach(b => (binary += String.fromCharCode(b)));
const encoded = btoa(binary); // 'TWFu'
// Base64 -> Uint8Array
const decoded = atob(encoded);
const result = Uint8Array.from(decoded, c => c.charCodeAt(0));
// Node.js
Buffer.from('Man').toString('base64'); // 'TWFu'
Buffer.from('TWFu', 'base64').toString(); // 'Man'

FAQ

Q.Pourquoi Base64 est-il plus grand que l'original ?

A.Parce que 3 octets d'entrée (24 bits) deviennent 4 caractères de sortie (également 24 bits de charge utile), la sortie fait 4/3 de l'entrée – environ 33 % de plus, avant rembourrage et sauts de ligne.

Q.Que signifie le rembourrage = ?

A.Les caractères = complètent le dernier groupe pour que la longueur de sortie soit un multiple de 4. Ils ne portent aucune donnée. Base64URL les omet souvent car la longueur n'a pas d'importance dans ce contexte.

Q.Base64 est-il du chiffrement ?

A.Non. Base64 est un encodage réversible sans clé. Toute personne qui voit la valeur encodée peut la décoder. Pour le secret, utilisez un chiffrement authentifié (AES-GCM, ChaCha20) et n'encodez le texte chiffré que si le canal exige du texte.

Q.Pourquoi ma chaîne Base64 casse-t-elle dans une URL ?

A.Les caractères + et / ne sont pas sûrs pour les URL : + peut devenir un espace et / peut modifier le chemin. Utilisez Base64URL (- et _) pour tout ce qui transite dans des URL, chaînes de requête ou noms de fichiers.

Q.Les data URIs valent-elles le coup pour les images ?

A.Pour les très petits éléments – quelques centaines d'octets à quelques kilo-octets – les data URIs économisent une requête et peuvent être plus rapides. Pour les images plus grandes, le surcoût Base64 de 33 % plus la perte de mise en cache navigateur font généralement d'un fichier séparé le meilleur choix.

Q.Pourquoi JWT utilise-t-il Base64URL sans rembourrage ?

A.Les segments JWT apparaissent dans des URL et des en-têtes où +, / et = sont gênants. L'alphabet Base64URL sûr pour les URL, plus la forme sans rembourrage, garde les jetons compacts et sans ambiguïté.

Références

  • RFC 4648 – The Base16, Base32, and Base64 Data Encodings : https://www.rfc-editor.org/rfc/rfc4648
  • RFC 7515 – JSON Web Signature (JWS), utilisation Base64URL : https://www.rfc-editor.org/rfc/rfc7515
  • MDN – btoa() et atob() : https://developer.mozilla.org/en-US/docs/Glossary/Base64
  • MDN – data URIs : https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Schemes/data

Encodez ou décodez maintenant

Base64, Base64URL, Hex, URL et HTML, entièrement côté client.

Un encodage, pas un contrôle de sécurité

Base64 est le moyen standard de faire transiter du binaire par des canaux texte – rappelez-vous juste le coût de 33 % en taille, la variante sûre pour les URL et le fait qu'il n'offre aucune confidentialité.

Encodez et décodez localement avec l'encodeur/décodeur – Base64, Base64URL, Hex, URL et HTML, le tout dans votre navigateur.

Base64encodeur Base64décodage Base64Base64URLdata URIbinaire vers texterembourrage base64quand utiliser base64