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.
Avis de droit d'auteur (Copyright Notice)
Copyright (C) The Internet Society (2006).
Table des matières (Table of Contents)
Sections principales
- 1. Introduction
- 2. Conventions utilisées dans ce document
- 3. Divergences d'implémentation
- 3.1 Sauts de ligne dans les données encodées
- 3.2 Remplissage des données encodées
- 3.3 Interprétation des caractères hors alphabet dans les données encodées
- 3.4 Choix de l'alphabet
- 3.5 Encodage canonique
- 4. Encodage Base 64
- 5. Encodage Base 64 avec l'alphabet sûr pour les URL et les noms de fichiers
- 6. Encodage Base 32
- 7. Encodage Base 32 avec l'alphabet hexadécimal étendu
- 8. Encodage Base 16
- 9. Diagrammes et exemples
- 10. Vecteurs de test
- 11. Implémentation ISO C99 de Base64
- 12. Considérations de sécurité
- 13. Modifications par rapport au RFC 3548
- 14. Remerciements
- 15. Conditions de copie
- 16. Références
- 16.1 Références normatives
- 16.2 Références informatives
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
| Encodage | Objectif principal | Applications typiques |
|---|---|---|
| Base64 | Encodage binaire général | Pièces jointes MIME, jetons JWT, Data URI |
| Base64URL | Encodage sûr pour les URL | JWT, jetons OAuth, paramètres d'URL |
| Base32 | Encodage lisible par l'homme | Clés TOTP, encodage Crockford |
| Base16 | Encodage hexadécimal | Affichage 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
- Source officielle : RFC 4648 (TXT)
- Page officielle : RFC 4648 DataTracker
- Errata : RFC Editor Errata
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)