Base64 encode decode : comprendre l'encodage Base64 et ses usages
Qu'est-ce que l'encodage Base64 ?
Le Base64 est un système d'encodage qui convertit des données binaires en une représentation textuelle ASCII. Il est défini par la RFC 4648 (IETF, 2006) et utilise un alphabet de 64 caractères : les lettres majuscules A-Z, les minuscules a-z, les chiffres 0-9, et les caractères + et /. Le caractère = sert de padding pour que la sortie soit toujours un multiple de 4 caractères.
Le principe est simple : chaque groupe de 3 octets (24 bits) est découpé en 4 blocs de 6 bits, chacun correspondant à un caractère de l'alphabet Base64. Cette transformation augmente la taille des données d'environ 33 %, mais garantit que le résultat ne contient que des caractères ASCII imprimables.
3 octets binaires (24 bits) → 4 caractères Base64 (augmentation de ~33 %)
Cas d'utilisation courants
L'encodage Base64 est utilisé dans de nombreux contextes où les données binaires doivent transiter par des canaux texte :
- Emails (MIME) : les pièces jointes sont encodées en Base64 pour être intégrées dans le corps du message, qui ne supporte que l'ASCII 7 bits.
- Data URI : les images peuvent être intégrées directement dans le HTML ou le CSS via
data:image/png;base64,..., évitant une requête HTTP supplémentaire. - Tokens d'authentification : les JWT (JSON Web Tokens) encodent leur header et payload en Base64URL.
- Certificats PEM : les certificats SSL/TLS et les clés cryptographiques sont stockés en Base64 entre des marqueurs
-----BEGIN CERTIFICATE-----.
+33 %
d'augmentation de taille lors de l'encodage Base64 (3 octets deviennent 4 caractères)
Base64 standard vs Base64 URL-safe
Comparaison des variantes Base64
Caractères : A-Z, a-z, 0-9, +, / | Padding : Oui (=)
Caractères : A-Z, a-z, 0-9, -, _ | Padding : Optionnel
Source : RFC 4648, sections 4 et 5
La variante Base64 URL-safe remplace les caractères + par - et / par _. Ces substitutions évitent les conflits avec les caractères réservés dans les URLs et les noms de fichiers. Le padding = est souvent omis dans cette variante car la longueur originale peut être déduite de la longueur encodée.
Encodage
Texte → Base64
btoa() ou TextEncoder + btoa
Décodage
Base64 → Texte
atob() + TextDecoder
Base64 et UTF-8 en JavaScript
En JavaScript, les fonctions natives btoa() et atob() ne gèrent que les caractères ASCII (code points 0-255). Pour encoder du texte contenant des accents, des emojis ou d'autres caractères Unicode, il faut d'abord convertir la chaîne en octets UTF-8 via TextEncoder, puis encoder ces octets en Base64. Le processus inverse utilise atob() puis TextDecoder.
Cet outil gère automatiquement l'UTF-8, ce qui signifie que vous pouvez encoder sans problème du texte contenant des caractères accentués (é, à, ç) ou des emojis.
Base64 n'est pas du chiffrement
Erreurs fréquentes à éviter
- Confondre encodage et chiffrement. Le Base64 ne protège pas les données. Un mot de passe encodé en Base64 est lisible par quiconque connaît le format.
- Ignorer le padding. Une chaîne Base64 dont la longueur n'est pas un multiple de 4 provoquera une erreur avec
atob(). Ajoutez les caractères=manquants. - Utiliser btoa() sur de l'UTF-8 directement.
btoa("café")échouera carédépasse le code point 255. Passez parTextEncoderd'abord. - Stocker des images volumineuses en Data URI. Une image de 100 Ko en Base64 pèsera ~133 Ko et ne bénéficiera pas de la mise en cache du navigateur. Préférez les fichiers externes pour les images de plus de quelques Ko.
Sources et références
- RFC 4648 - The Base16, Base32, and Base64 Data Encodings (IETF, 2006).
- MDN Web Docs - btoa() : documentation de la fonction d'encodage Base64.
- MDN Web Docs - TextEncoder : encodage UTF-8 en JavaScript.