Aller au contenu principal

RFC 4648 - Encodages Base16, Base32 et Base64

  • Statut : Proposed Standard (Norme proposée)
  • Date de publication : octobre 2006
  • Flux : IETF
  • Obsolète : RFC 3548
  • Errata : Aucun errata

Résumé (Abstract)​

Ce document décrit les encodages courants base 64, base 32 et base 16, et traite également de l'utilisation des sauts de ligne dans les données encodées, de l'utilisation du remplissage dans les données encodées, de l'interprétation des caractères hors alphabet dans les données encodées, de l'utilisation de différents alphabets d'encodage, et de l'encodage canonique.


Statut de ce mémoire (Status of This Memo)​

Ce document spécifie un protocole de suivi de norme Internet pour la communauté Internet et sollicite la discussion et les suggestions d'amélioration. Pour connaître l'état de normalisation et le statut de ce protocole, veuillez consulter la version actuelle des « Internet Official Protocol Standards » (STD 1). La distribution de ce mémoire n'est pas restreinte.


Copyright (C) The Internet Society (2006).


Table des matières (Table of Contents)​

Sections principales​


Pourquoi l'encodage de base est important​

L'encodage de base est le fondement de la transmission de données sur Internet. Il convertit les données binaires en format texte, permettant leur transmission et leur stockage dans des environnements uniquement textuels.

Cas d'usage principaux​

EncodageObjectif principalApplications typiques
Base64Encodage binaire généralPièces jointes MIME, jetons JWT, Data URI
Base64URLEncodage sûr pour les URLJWT, jetons OAuth, paramètres d'URL
Base32Encodage lisible par l'hommeClés TOTP, encodage Crockford
Base16Encodage hexadécimalAffichage de hachage, sortie de débogage

Référence rapide Base64​

Encodage Base64 standard​

Jeu de caractères : A-Z, a-z, 0-9, +, /
Caractère de remplissage : =
Longueur de sortie : octets d'entrée × 4/3 (arrondi au multiple de 4)

Exemple :
Entrée : "Hello"
Sortie : "SGVsbG8="

Processus d'encodage :
H e l l o
01001000 01100101 01101100 01101100 01101111
↓ regroupement par 6 bits
010010 000110 010101 101100 011011 000110 1111
↓ consultation de la table
S G V s b G 8=

Encodage Base64URL (RFC 4648 §5)​

Jeu de caractères : A-Z, a-z, 0-9, -, _
Caractère de remplissage : = (généralement omis)

Différences avec le Base64 standard :
+ → -
/ → _

Usage : JWT, jetons OAuth, paramètres d'URL

Table de référence des encodages de base​

Table des caractères Base64 standard​

Valeur   Car.   Valeur   Car.   Valeur   Car.   Valeur   Car.
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

Caractère de remplissage : =

Table des caractères Base32 standard​

Valeur   Car.   Valeur   Car.
0 A 16 Q
1 B 17 R
2 C 18 S
3 D 19 T
4 E 20 U
5 F 21 V
6 G 22 W
7 H 23 X
8 I 24 Y
9 J 25 Z
10 K 26 2
11 L 27 3
12 M 28 4
13 N 29 5
14 O 30 6
15 P 31 7

Caractère de remplissage : =

Applications concrètes​

JWT (JSON Web Token)​

Structure JWT :
header.payload.signature

Chaque partie est encodée en Base64URL :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Data URI​

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

Pièces jointes MIME​

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

JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlIC9DYXRhbG9n...

Ressources associées​

RFC associés​

  • RFC 2045 - MIME Partie 1 (définit Base64 pour MIME)
  • RFC 3548 - Encodages de base (abrogé par RFC 4648)
  • RFC 7515 - JSON Web Signature (utilise Base64URL)
  • RFC 7519 - JSON Web Token (utilise Base64URL)