DevToolBoxGRATUIT
Blog

Encodage Base64 en pratique : 7 utilisations que tout développeur devrait connaître

8 min de lecturepar DevToolBox
Ad Space

Base64 est omniprésent dans le développement web, mais la plupart des tutoriels n’expliquent que comment cela fonctionne. Cet article se concentre sur les 7 scénarios concrets où vous utiliserez réellement l’encodage Base64 dans votre travail quotidien de développement, avec des exemples de code à copier directement.

Essayez notre outil d’encodage/décodage Base64 →

1. Intégration d’images en HTML/CSS (Data URIs)

Les Data URIs permettent d’intégrer de petites images directement dans votre HTML ou CSS, éliminant une requête HTTP. C’est particulièrement utile pour les icônes, logos et petits éléments d’interface.

<!-- Embed a small icon directly in HTML -->
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEU..." alt="icon" />

/* Embed in CSS */
.icon {
  background-image: url('data:image/svg+xml;base64,PHN2Zy...');
}

Quand utiliser : Images de moins de 10 Ko (icônes, petits logos, éléments d’interface).

Quand NE PAS utiliser : Images de plus de 10 Ko — l’augmentation de 33 % de la taille l’emporte sur l’économie de la requête HTTP.

// Node.js: Convert image file to Base64 data URI
const fs = require('fs');
const imageBuffer = fs.readFileSync('icon.png');
const base64 = imageBuffer.toString('base64');
const dataUri = `data:image/png;base64,${base64}`;
console.log(dataUri);

Convertissez vos images en Base64 avec notre encodeur →

2. Structure des jetons JWT

Les JSON Web Tokens (JWT) utilisent l’encodage Base64URL (une variante sûre pour les URL) pour leurs trois parties : en-tête, charge utile et signature. Comprendre cela est essentiel pour déboguer les problèmes d’authentification.

// A JWT token:
// eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiam9obiJ9.signature
//  ^^^^^ header ^^^^^   ^^^^^ payload ^^^^^

// Decoding the header (Base64URL → JSON):
atob('eyJhbGciOiJIUzI1NiJ9');
// → '{"alg":"HS256"}'

// Decoding the payload:
atob('eyJ1c2VyIjoiam9obiJ9');
// → '{"user":"john"}'

Point clé : Les jetons JWT ne sont pas chiffrés. N’importe qui peut décoder l’en-tête et la charge utile avec un simple décodage Base64. La signature vérifie l’intégrité, pas la confidentialité.

Décodez les jetons JWT avec notre décodeur JWT →

3. Secrets Kubernetes

Kubernetes stocke les valeurs secrètes sous forme de chaînes encodées en Base64 dans les manifestes YAML. C’est l’un des cas d’utilisation Base64 les plus courants en DevOps.

# Creating a Kubernetes Secret
apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
type: Opaque
data:
  DB_PASSWORD: c3VwZXItc2VjcmV0  # echo -n 'super-secret' | base64
  DB_USER: YWRtaW4=              # echo -n 'admin' | base64
# Encode a value for Kubernetes secrets
echo -n 'my-password' | base64
# → bXktcGFzc3dvcmQ=

# Decode a Kubernetes secret value
echo -n 'bXktcGFzc3dvcmQ=' | base64 --decode
# → my-password

# IMPORTANT: Always use -n with echo to avoid trailing newline!

Avertissement de sécurité : Le Base64 dans les secrets Kubernetes sert à l’encodage, pas au chiffrement. Utilisez des solutions comme Sealed Secrets, External Secrets ou Vault pour une vraie sécurité.

4. Charges utiles de requêtes/réponses API

Lorsque les API doivent transmettre des données binaires (images, fichiers, certificats) dans des charges JSON, l’encodage Base64 est l’approche standard car JSON ne prend en charge que le texte.

// Uploading an image via API
const fileInput = document.getElementById('avatar');
const file = fileInput.files[0];

const reader = new FileReader();
reader.onload = async () => {
  const base64 = reader.result.split(',')[1]; // Remove data URI prefix

  await fetch('/api/upload-avatar', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      filename: file.name,
      data: base64,        // Base64-encoded file content
      contentType: file.type,
    }),
  });
};
reader.readAsDataURL(file);

5. Authentification HTTP Basic

Le schéma d’authentification HTTP Basic transmet les identifiants sous forme de chaîne encodée en Base64 dans l’en-tête Authorization. C’est encore utilisé dans de nombreuses API.

// Constructing Basic Auth header
const username = 'admin';
const password = 'secret123';
const credentials = btoa(`${username}:${password}`);
// → "YWRtaW46c2VjcmV0MTIz"

// Using in fetch
fetch('https://api.example.com/data', {
  headers: {
    'Authorization': `Basic ${credentials}`,
  },
});

// curl equivalent
// curl -u admin:secret123 https://api.example.com/data
// (curl Base64-encodes automatically with -u)

Utilisez toujours HTTPS avec l’authentification Basic. En HTTP non chiffré, les identifiants Base64 peuvent être décodés trivialement par quiconque intercepte le trafic.

6. Pièces jointes des e-mails (MIME)

Les protocoles e-mail (SMTP) ont été conçus pour du texte ASCII uniquement. Les pièces jointes binaires — images, PDF, documents — sont encodées en Base64 avant d’être incluses dans les messages via MIME.

// Node.js: Sending email with attachment (nodemailer)
const nodemailer = require('nodemailer');
const fs = require('fs');

const pdfBuffer = fs.readFileSync('report.pdf');

await transporter.sendMail({
  from: 'sender@example.com',
  to: 'recipient@example.com',
  subject: 'Monthly Report',
  attachments: [
    {
      filename: 'report.pdf',
      content: pdfBuffer,
      // nodemailer handles Base64 encoding internally
      encoding: 'base64',
    },
  ],
});

En coulisses, le message MIME ressemble à :

Content-Type: application/pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="report.pdf"

JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMg
MCBSPj4Kc3RyZWFtCkJUCi9GMS...

7. Stockage de données binaires dans des systèmes texte uniquement

Certains systèmes — variables d’environnement, fichiers de configuration JSON, exports CSV — ne prennent en charge que le texte. Base64 permet d’intégrer en toute sécurité des données binaires dans ces contextes texte uniquement.

# .env file: Store SSL certificate as Base64
SSL_CERT=LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...
SSL_KEY=LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0t...

# In your application:
# const cert = Buffer.from(process.env.SSL_CERT, 'base64');
// Storing binary config in JSON
{
  "favicon": "iVBORw0KGgoAAAANSUhEUgAAA...",
  "sslCert": "LS0tLS1CRUdJTiBDRVJUSUZJ..."
}

Ce schéma est couramment utilisé dans les plateformes cloud (Heroku, Railway, Fly.io) où les variables d’environnement sont le principal mécanisme de configuration.

Base64 vs Base64URL

Le Base64 standard utilise + et / qui ne sont pas sûrs dans les URL. Base64URL les remplace par - et _ :

VarianteAlphabetRemplissageUtilisé dans
Base64A-Z, a-z, 0-9, +, /Remplissage =E-mail, data URIs, secrets K8s
Base64URLA-Z, a-z, 0-9, -, _Pas de remplissageJetons JWT, paramètres d’URL

Référence rapide : Commandes Base64

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

# Decode a string
echo -n 'SGVsbG8gV29ybGQ=' | base64 --decode
# → Hello World

# Encode a file
base64 < input.bin > output.txt

# Decode a file
base64 --decode < encoded.txt > output.bin

# JavaScript (browser)
btoa('Hello World')        // encode
atob('SGVsbG8gV29ybGQ=')  // decode

# Python
import base64
base64.b64encode(b'Hello World')
base64.b64decode(b'SGVsbG8gV29ybGQ=')

Encodez et décodez du Base64 instantanément avec notre outil →

Questions fréquemment posées

L’encodage Base64 est-il identique au chiffrement ?

Non. Base64 est un schéma d’encodage, pas du chiffrement. N’importe qui peut décoder des données Base64 — il ne fournit aucune sécurité. Base64 est conçu pour le transport sûr de données à travers des canaux texte uniquement, pas pour protéger des informations sensibles.

Pourquoi Base64 augmente-t-il la taille des données d’environ 33 % ?

Base64 convertit 3 octets de données binaires en 4 caractères ASCII (6 bits par caractère au lieu de 8). Ce ratio 3:4 signifie que les données encodées en Base64 sont environ 33 % plus grandes que les données binaires d’origine. Le compromis est la compatibilité universelle avec le texte.

Quand ne dois-je PAS utiliser Base64 ?

Évitez Base64 pour les fichiers volumineux (images de plus de 10 Ko, vidéos, documents) car cela augmente considérablement la taille de la charge utile. Évitez-le aussi pour le stockage à long terme en base de données — utilisez des colonnes binaires (BLOB/BYTEA) à la place. Base64 est idéal pour les petites données transitant par des canaux texte uniquement.

Essayez ces outils associés

B64Base64 Encoder/DecoderJWTJWT Decoder
Ad Space

Articles connexes

UUID v4 vs UUID v7 vs ULID vs NanoID : Quel identifiant choisir ?

Comparaison complète de UUID v4, UUID v7, ULID et NanoID pour les clés primaires, les systèmes distribués et les applications frontend.