Comprendre le format Base64 en 2 minutes
La Base64 est un format d'encodage, mais quel est son intérêt et dans quel contexte est-ce intéressant de l'utiliser ?
Article publié le 24/11/2024, dernière mise à jour le 24/11/2024
Vous avez sûrement déjà entendu parlé de la Base64 autour des sujets :
- Les tokens JWT
- Le transfert ou le stockage de fichiers
- Le hashage de données
- Les certificats
- Etc…
Dans cet article nous allons comprendre la nature de ce format, ses avantages et comment l’utiliser avec quelques exemples de code.
Qu’est-ce que la Base64 ?
La définition la plus simple que l’on pourrait donner, c’est que la Base64 est un format d’encodage des données, tout comme le binaire, l’hexadécimal, etc…
La différence avec les autres encodage vient de l’ensemble des caractères alphanumériques pour représenter ces fameuses données.
En binaire on utilise les caractères de 0 à 1, en hexadécimal on utilise les caractères 0 à 9 et de A à F, et en Base64, on utilise :
- Les caractères de a à z (minuscule)
- Les caractères de A à Z (majuscule)
- Les chiffres de 0 à 9
- Les caractères spéciaux “+” et “/”
À noter qu’on utilise également le caractère spécial “=” qui sert à remplir les bits manquants à la fin de la séquence.
C’est donc du nombre de caractères qui sert à l’encodage que ce format tire son nom “Base64”, pour 64 caractères utilisés
On utilise ce format pour encoder des données brutes (ou “binaires”), vers un format sous la forme d‘une chaîne de caractères. Exemple, le texte suivant :
Lorem ipsum dolores sit
Devient en Base64 :
TG9yZW0gaXBzdW0gZG9sb3JlcyBzaXQ=
Quel intérêt ?
La question qui se pose souvent est : pourquoi utiliser la Base64 plutôt que la représentation binaire, ou hexadécimale ?
L’intérêt principal de la Base64 réside dans sa “compatibilité”
Ce format permet de transmettre des données binaires (des fichiers par exemple) dans des protocoles ou des formats de fichiers qui sont fait pour transporter du texte simple.
À l’origine, la Base64 a été inventée pour transmettre des fichiers dans des e-mails, sans risquer que les données binaires du fichier ne soit mal interprétée par protocol SMTP.
Comme la Base64 n’est constituées que par des caractères communs, visibles et même imprimables, les données sont compatibles avec n’importe quel système qui transporte (ou stocke) du texte.
Quel inconvénient ?
Dû à son format, les données d’un fichier converties en Base64 sont en général 33-37% plus volumineuses que la version binaire.
C’est pour cela qu’il faut utiliser cet encodage uniquement lorsqu’il y a un vrai intérêt, comme dans les headers HTTP, pour les jetons JWT par exemple !
Comment l’utiliser ?
En JavaScript
Il existe des fonctions dédiés à l’encodage Base64 en JavaScript, qui sont disponible dans le navigateur mais également en NodeJS et tous les autres environnements.
Pour encoder une donnée en Base64, nous allons utiliser btoa()
, comme ceci :
const data = "hello world";
const base64 = btoa(data);
// "aGVsbG8gd29ybGQ="
À noter que le nom de la fonction signifie “Binary” to “Ascii”
Et pour décoder une chaîne en Base64, nous allons utiliser la fonction inverse atob()
:
const base64 = "aGVsbG8gd29ybGQ=";
const data = btoa(base64);
// "hello world"
Dans d’autres langages
La Base64 est très utilisée, vous trouverez donc des utilitaires dans tous les langages majeurs pour vous aider :
- Java : La classe Base64
- C# : Les méthodes FromBase64String() et ToBase64String()
- Rust : Le crate base64
- Python : La bibliothèque Base64
- Et bien d’autres…
Cody
11/25/2024, 11:10 AM
Merci à Akanoa sur X d'avoir mentionné le fait que l'encodage/décodage peuvent être implémentés de différentes manières, comme expliqué dans cet article 👇
https://codescene.com/engineering-blog/base-64-padding-and-urls
Si c'est le cas, le décodage peut dysfonctionner, avec ou sans erreur selon l'implémentation.