Convertisseurs

Encodage Base64 expliqué : fonctionnement, Data URIs et JWT

Découvrez comment fonctionne l'encodage Base64, pourquoi il existe et où il est utilisé. Couvre l'algorithme d'encodage, les Data URIs, les jetons JWT, les pièces jointes d'e-mail et des exemples dans 7 langages.

Publié sur 20 mars 2026
16 min lire
Guides CaesarCipher.org

Encodage Base64 expliqué : fonctionnement, Data URIs et JWT

L'encodage Base64 est l'un des schémas d'encodage les plus utilisés en informatique, mais beaucoup de développeurs l'emploient sans bien comprendre son fonctionnement ni sa raison d'être. Chaque fois que vous intégrez une image dans un e-mail HTML, décodez un jeton JWT, manipulez l'authentification HTTP Basic ou ouvrez un fichier de certificat PEM, vous travaillez avec Base64.

Ce guide explique l'algorithme Base64 depuis les bases, explore ses usages les plus courants et montre comment encoder et décoder du Base64 dans sept langages de programmation. Essayez notre encodeur et décodeur Base64 gratuit pour expérimenter avec les exemples ci-dessous.

Qu'est-ce que Base64 ?

Base64 est un schéma d'encodage binaire-vers-texte qui représente des données binaires avec 64 caractères ASCII imprimables. Il a été conçu pour transmettre des données binaires en toute sécurité sur des canaux qui ne prennent en charge que le texte, comme l'e-mail (SMTP) et les premières versions de HTTP.

Le nom "Base64" vient du fait qu'il utilise un alphabet de 64 caractères :

Plage d'indicesCaractèresNombre
0-25A-Z26
26-51a-z26
52-610-910
62+1
63/1
Remplissage=

Cela donne exactement 64 caractères (2^6), ce qui signifie que chaque caractère Base64 encode exactement 6 bits de données.

Comment fonctionne l'encodage Base64

L'algorithme Base64 convertit les données binaires en trois étapes :

Étape 1 : convertir l'entrée en binaire

Chaque octet d'entrée est représenté par 8 bits. Pour une entrée texte, cela signifie d'abord convertir chaque caractère en sa valeur d'octet ASCII ou UTF-8.

Exemple : le texte "Man" en ASCII :

CaractèreDécimal ASCIIBinaire (8 bits)
M7701001101
a9701100001
n11001101110

Étape 2 : découper en groupes de 6 bits

Les 24 bits combinés (3 octets × 8 bits) sont divisés en quatre groupes de 6 bits :

Original:  01001101  01100001  01101110
           --------  --------  --------
Regrouped: 010011  010110  000101  101110
           ------  ------  ------  ------

Étape 3 : mapper vers les caractères Base64

Chaque valeur de 6 bits (0-63) correspond à un caractère de l'alphabet Base64 :

Valeur 6 bitsDécimalCaractère Base64
01001119T
01011022W
0001015F
10111046u

Résultat : "Man" → "TWFu"

Gestion du remplissage

Comme Base64 travaille par groupes de 3 octets (24 bits = quatre groupes de 6 bits), une entrée dont la longueur n'est pas un multiple de 3 octets nécessite un remplissage :

Longueur d'entréeRemplissage requisExemple
3 octets (divisible)Aucun"Man" → "TWFu"
2 octets (reste 2)Un ="Ma" → "TWE="
1 octet (reste 1)Deux =="M" → "TQ=="

Le caractère de remplissage = indique au décodeur combien d'octets ont réellement été encodés dans le dernier groupe.

L'augmentation de taille de 33 %

L'encodage Base64 augmente toujours la taille des données d'environ 33 %. Chaque tranche de 3 octets en entrée (24 bits) devient 4 octets en sortie (4 caractères ASCII). Le ratio exact est 4/3 = 1,333...

Taille d'origineTaille Base64Surcoût
1 KB1.33 KB+0.33 KB
10 KB13.3 KB+3.3 KB
100 KB133 KB+33 KB
1 MB1.33 MB+0.33 MB

Ce surcoût est le compromis fondamental de Base64 : une taille plus grande en échange d'une représentation textuelle sûre. Pour cette raison, Base64 convient surtout aux petits payloads, pas à l'encodage de gros fichiers sauf nécessité.

Où Base64 est utilisé

1. Data URIs (intégrer des fichiers dans HTML/CSS)

Les Data URIs permettent d'intégrer le contenu d'un fichier directement dans HTML ou CSS, en supprimant une requête HTTP :

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..." alt="Small icon" />

Le format est : data:[MIME type];base64,[encoded data]

Quand utiliser les Data URIs :

  • Petites images sous 5-10 KB (icônes, éléments décoratifs)
  • Images d'arrière-plan CSS utilisées sur chaque page
  • Images à usage unique qui ne bénéficient pas de la mise en cache

Quand NE PAS utiliser les Data URIs :

  • Images de plus de 10 KB (le surcoût de 33 % s'accumule)
  • Images partagées entre plusieurs pages (impossibles à mettre en cache séparément)
  • Pages critiques pour la performance (les chaînes base64 augmentent le temps de parsing HTML)

2. JWT (JSON Web Tokens)

Les jetons JWT utilisent une variante compatible URL de Base64 (appelée Base64URL) pour leurs trois parties :

header.payload.signature

Chaque partie est encodée en Base64URL. Par exemple, le décodage d'un payload JWT :

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

se décode en :

{"sub":"1234567890","name":"John Doe","iat":1516239022}

Important : les jetons JWT sont encodés, pas chiffrés. N'importe qui peut décoder et lire le payload. Ne stockez jamais de données sensibles (mots de passe, numéros de carte bancaire) dans les payloads JWT.

3. Pièces jointes d'e-mail (MIME)

L'e-mail a été conçu à l'origine pour du texte ASCII brut. Le standard MIME (Multipurpose Internet Mail Extensions) utilise Base64 pour encoder les pièces jointes binaires :

Content-Type: application/pdf
Content-Transfer-Encoding: base64

JVBERi0xLjQKMSAwIG9iago8PAovVHlwZSAvQ2F0YWxvZwov...

Chaque pièce jointe d'e-mail que vous avez envoyée ou reçue a été encodée en Base64 pendant le transport.

4. Authentification HTTP Basic

HTTP Basic Auth encode les identifiants sous la forme username:password en Base64 :

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

Décoder dXNlcm5hbWU6cGFzc3dvcmQ= révèle username:password. Ce n'est pas sécurisé en soi : cela doit être utilisé uniquement sur HTTPS.

5. Clés et certificats cryptographiques

Le format PEM (Privacy Enhanced Mail) enveloppe des données binaires encodées en Base64 entre des lignes d'en-tête et de pied :

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
-----END PUBLIC KEY-----

Les certificats SSL/TLS, les clés SSH et les clés GPG utilisent tous ce format.

Base64 standard ou Base64 compatible URL

Base64 standard utilise + et /, qui ont une signification spéciale dans les URL. Base64 compatible URL (Base64URL, défini dans RFC 4648) les remplace :

FonctionBase64 standardBase64 compatible URL
Caractère 62+-
Caractère 63/_
Remplissage= (obligatoire)Souvent omis
Utilisé dansE-mail, PEM, Data URIsURL, JWT, noms de fichiers

Base64 ou autres encodages

EncodageBaseAugmentation de tailleJeu de caractèresUsage courant
Base6464~33%A-Z, a-z, 0-9, +, /E-mail, Data URIs, JWT
Base3232~60%A-Z, 2-7Codes TOTP, adresses onion
Base16 (Hex)16100%0-9, A-FEmpreintes de hachage, codes couleur
Base85 (Ascii85)85~25%ASCII 33-117PDF, patches binaires Git

Base64 offre le meilleur équilibre entre compacité et compatibilité dans la plupart des cas.

Base64 dans les langages de programmation

JavaScript

// Encode (ASCII only)
const encoded = btoa('Hello World');  // "SGVsbG8gV29ybGQ="

// Decode
const decoded = atob('SGVsbG8gV29ybGQ=');  // "Hello World"

// Unicode-safe encode
const unicodeEncode = btoa(unescape(encodeURIComponent('Hello 世界')));

// Unicode-safe decode
const unicodeDecode = decodeURIComponent(escape(atob(encoded)));

Python

import base64

# Encode
encoded = base64.b64encode(b'Hello World').decode('utf-8')  # "SGVsbG8gV29ybGQ="

# Decode
decoded = base64.b64decode('SGVsbG8gV29ybGQ=').decode('utf-8')  # "Hello World"

# URL-safe variant
url_safe = base64.urlsafe_b64encode(b'Hello World').decode('utf-8')

Ligne de commande (macOS/Linux)

# Encode
echo -n 'Hello World' | base64           # SGVsbG8gV29ybGQ=

# Decode
echo 'SGVsbG8gV29ybGQ=' | base64 --decode  # Hello World

# Encode a file
base64 image.png > image.b64

# Decode a file
base64 --decode image.b64 > image.png

Java

import java.util.Base64;

// Encode
String encoded = Base64.getEncoder().encodeToString("Hello World".getBytes());

// Decode
byte[] decoded = Base64.getDecoder().decode("SGVsbG8gV29ybGQ=");
String text = new String(decoded);  // "Hello World"

PHP

// Encode
$encoded = base64_encode('Hello World');  // "SGVsbG8gV29ybGQ="

// Decode
$decoded = base64_decode('SGVsbG8gV29ybGQ=');  // "Hello World"

Go

import "encoding/base64"

// Encode
encoded := base64.StdEncoding.EncodeToString([]byte("Hello World"))

// Decode
decoded, _ := base64.StdEncoding.DecodeString("SGVsbG8gV29ybGQ=")

C#

// Encode
string encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes("Hello World"));

// Decode
string decoded = Encoding.UTF8.GetString(Convert.FromBase64String("SGVsbG8gV29ybGQ="));

Base64 n'est PAS du chiffrement

Idée reçue fréquente : Base64 est souvent confondu avec le chiffrement. Ce sont des mécanismes fondamentalement différents :

AspectEncodage Base64Chiffrement
ObjectifConversion de format de donnéesProtection des données
RéversibilitéTout le monde peut décoderNécessite une clé secrète
SécuritéAucuneForte (si correctement implémenté)
Cas d'usageCompatibilité de transportConfidentialité

N'utilisez jamais Base64 pour "cacher" des données sensibles. Il n'apporte aucune sécurité. Si vous devez protéger des données, utilisez un vrai chiffrement (AES-256, RSA), puis encodez éventuellement la sortie chiffrée en Base64 pour le transport.

Foire aux questions

Puis-je encoder une image en Base64 ?

Oui. Lisez le fichier image comme des octets binaires, puis encodez ces octets en Base64. Le résultat est une chaîne texte qui peut être intégrée dans HTML, CSS, JSON ou tout autre format textuel. Cependant, la chaîne encodée sera environ 33 % plus grande que le fichier d'origine. Pour le web, n'intégrez que de petites images (moins de 5-10 KB) sous forme de Data URIs.

Pourquoi ma chaîne Base64 se termine-t-elle par = ou == ?

Les caractères = sont du remplissage. Ils apparaissent lorsque la longueur de l'entrée n'est pas un multiple de 3 octets. Un = signifie que le dernier groupe contenait 2 octets ; == signifie qu'il contenait 1 octet. Le remplissage garantit que la longueur de la chaîne encodée est toujours un multiple de 4.

L'encodage Base64 est-il identique dans tous les langages ?

L'algorithme Base64 standard (RFC 4648) est identique dans tous les langages : la même entrée produit toujours la même sortie. Toutefois, certains langages ont par défaut un comportement différent de retour à la ligne (par exemple, getMimeEncoder() en Java ajoute des sauts de ligne tous les 76 caractères pour respecter MIME).


Prêt à encoder ou décoder du Base64 ? Essayez notre encodeur et décodeur Base64 pour une conversion instantanée avec comparaison de taille. Pour d'autres outils d'encodage, consultez notre encodeur URL, notre convertisseur hexadécimal vers texte et notre traducteur binaire.

À propos de cet article

Cet article fait partie de notre collection de guides Convertisseurs. Explorez les outils, exemples et workflows pratiques associés sur CaesarCipher.org.

Autres Tutoriels Convertisseurs

Essayez l'outil Convertisseurs

Mettez le guide en pratique avec des outils et exemples liés à convertisseurs.

Essayez l'outil Convertisseurs