Outils Malins

Base64 encode / decode

Encodez / décodez en Base64 avec gestion UTF-8 native et variante URL-safe (RFC 4648). 100 % local — aucune donnée envoyée.

Encodeur / décodeur Base64

Encodage et décodage Base64 (RFC 4648). Gestion UTF-8 native, variante URL-safe disponible.

Qu'est-ce que Base64 ?

Base64 est un codage qui représente des données binaires sous forme de texte ASCII imprimable, à partir d'un alphabet de 64 caractères : A-Z (26), a-z (26), 0-9 (10), + et /. Chaque triplet de 3 octets binaires (24 bits) est divisé en 4 groupes de 6 bits, encodés chacun par un caractère.

Conséquence : Base64 augmente la taille de ~33 % (4 caractères pour 3 octets). À ne pas utiliser pour transférer des fichiers binaires volumineux quand le binaire direct est possible.

Cas d'usage

  • Pièces jointes e-mail (MIME) : SMTP ne transmet que du texte 7-bit historiquement.
  • data: URLs : intégrer une image directement dans du HTML ou CSS sans requête HTTP séparée (favicons, petites icônes).
  • JSON Web Tokens (JWT) : header et payload encodés en Base64-URL.
  • Authentification HTTP Basic : Authorization: Basic dXNlcjpwYXNz (user:pass en Base64).
  • API REST : payloads binaires (PDF, images) dans des JSON.
  • Cookies / localStorage : stocker des données binaires dans un format texte.

Variante URL-safe

Les caractères + et / de l'alphabet Base64 standard posent problème dans les URL (où + signifie espace et / est un séparateur). La RFC 4648 §5 définit donc une variante Base64-URL :

  • +-
  • /_
  • Le padding = est souvent omis (compatible JWT)

Exemple complet

Texte : "Hello, monde !"
UTF-8 : 48 65 6C 6C 6F 2C 20 6D 6F 6E 64 65 20 21
Base64 : SGVsbG8sIG1vbmRlICE=

Conversion dans les principaux langages

// JavaScript (UTF-8 safe)
btoa(unescape(encodeURIComponent(text)))                    // encode
decodeURIComponent(escape(atob(b64)))                       // decode

// Python
import base64
base64.b64encode(text.encode()).decode()                    // encode
base64.b64decode(b64).decode()                              // decode
base64.urlsafe_b64encode(...)                               // URL-safe

// PHP
base64_encode($text);
base64_decode($b64);

// Bash
echo -n "Hello" | base64
echo -n "SGVsbG8=" | base64 --decode

Sécurité : pourquoi Base64 n'est pas un chiffrement

Base64 n'est PAS un chiffrement. C'est un encodage déterministe et réversible sans clé. N'importe qui peut décoder. Voir des mots de passe ou tokens « cachés » en Base64 dans des cookies ou en URL est un anti-pattern de sécurité fréquent. Pour le secret, utilisez du chiffrement symétrique (AES-256-GCM) ou asymétrique (RSA, Ed25519).

Pièges courants

  • Confondre Base64 et Base64-URL → erreur de décodage du JWT.
  • Encoder du texte non-UTF-8 sans précaution → caractères perdus.
  • Oublier le padding = ou en ajouter de trop.
  • Croire que Base64 protège des données (faux, c'est public).
  • Encoder des fichiers de plusieurs Mo en Base64 dans un JSON (inefficace).

Questions fréquentes

Base64 chiffre-t-il ?

Non, encodage réversible sans clé. Lisible par tous.

URL-safe ?

Variante avec − et _ au lieu de + et /. Sans = de padding souvent.

Pourquoi le = ?

Padding pour aligner sur 3 octets. 1 ou 2 = en fin.

Taille augmente ?

+33 % (4 chars pour 3 octets).

Usage principal ?

E-mails, JWT, data: URLs, Basic Auth, JSON binaire.

Outils complémentaires

Sources