Le blog de Philippe

Base64

P.Leclercq dans Sécurité    2024-12-30   technologie 

article header image

Encodage Base64

Dans un précédent article sur MIME, vous avez découvert le format Base64 utilisé pour encoder les pièces jointes. Cet article explore ce qu’est l’encodage Base64, pourquoi il a été créé et comment il est utilisé dans les protocoles de messagerie et web.

Qu’est-ce que l’encodage Base64 ?

Base64 est un système d’encodage binaire-texte qui convertit les données binaires en un format de chaîne ASCII. En résumé, il encode les données binaires brutes en un ensemble de 64 caractères de la table ASCII : lettres, chiffres et deux caractères spéciaux (généralement + et /), avec = comme remplissage.

Par exemple :

  • Entrée (binaire) : 01001000 01100101 01101100 01101100 01101111 (“Hello” en ASCII)
  • Sortie codée : SGVsbG8=

Chaque chaîne codée en Base64 représente trois octets de données binaires répartis en quatre groupes de 6 bits, associés à un caractère du jeu de 64 caractères.

Pourquoi le Base64 a-t-il été créé ?

Le codage Base64 a été introduit pour résoudre un problème clé : de nombreux protocoles de communication (comme le courrier électronique) ont été conçus pour traiter du texte, et non des données binaires brutes. L’envoi de données binaires (par exemple, des images, des documents) via des protocoles textuels pouvait corrompre les données ou les rendre illisibles. Base64 a été conçu pour :

  1. Assurer la compatibilité : En convertissant les données binaires en un format texte lisible et fiable, Base64 assure la compatibilité avec les systèmes qui traitent des données textuelles.
  2. Préserver l’intégrité : Le codage des données binaires empêche toute mauvaise interprétation ou corruption causée par des caractères de contrôle ou des octets non imprimables.

Fonctionnement de Base64

Codage

Pour encoder des données avec le schéma de codage Base64 :

  1. Diviser les données binaires en blocs de trois octets (24 bits) ;
  2. Diviser les 24 bits en quatre segments de 6 bits ;
  3. Associer chaque segment de 6 bits à un caractère de l’alphabet Base64 ;
  4. Ajouter un remplissage (=) si l’entrée n’est pas un multiple de trois octets.

Voici le tableau de l’alphabet Base64 :

Valeur (Décimale) Valeur (Binaire) Caractère Base64
0 000000 A
1 000001 B
2 000010 C
3 000011 D
4 000100 E
5 000101 F
6 000110 G
7 000111 H
8 001000 I
9 001001 J
10 001010 K
11 001011 L
12 001100 M
13 001101 N
14 001110 O
15 001111 P
16 010000 Q
17 010001 R
18 010010 S
19 010011 T
20 010100 U
21 010101 V
22 010110 W
23 010111 X
24 011000 Y
25 011001 Z
26 011010 a
27 011011 b
28 011100 c
29 011101 d
30 011110 e
31 011111 f
32 100000 g
33 100001 h
34 100010 i
35 100011 j
36 100100 k
37 100101 l
38 100110 m
39 100111 n
40 101000 o
41 101001 p
42 101010 q
43 101011 r
44 101100 s
45 101101 t
46 101110 u
47 101111 v
48 110000 w
49 110001 x
50 110010 y
51 110011 z
52 110100 0
53 110101 1
54 110110 2
55 110111 3
56 111000 4
57 111001 5
58 111010 6
59 111011 7
60 111100 8
61 111101 9
62 111110 +
63 111111 /

Exemple d’encodage d’une chaîne binaire

Voyons un exemple d’encodage d’une chaîne binaire :

  1. Entrée binaire : 01000001 01000010 01000011 (qui représente les caractères ASCII « ABC »).
  2. Découpage en groupes de 6 bits : 010000 010100 001001 000011.
  3. Conversion en décimal : 16, 20, 9, 3.
  4. Mise en correspondance avec l’alphabet Base64 : En utilisant le tableau ci-dessus, 16 = Q, 20 = U, 9 = J, 3 = D.
  5. Chaîne encodée : Le résultat est QUJD.

Si la longueur d’entrée n’est pas un multiple de 3 octets, des caractères de remplissage (=) sont ajoutés pour garantir un codage correct.

Décodage

Le décodage inverse le processus ci-dessus, transformant le texte Base64 en son format binaire d’origine.

Pour décoder une chaîne codée en Base64 :

  1. Associer chaque caractère de l’alphabet Base64 à sa représentation 6 bits ;
  2. Diviser la chaîne binaire obtenue en octets de 8 bits.

Exemple de décodage d’une chaîne base64

  1. Entrée Base64 : TWFuZ2Vy.
  2. Association à l’alphabet Base64 : 010011 010110 000101 101110 011001 110110 010101 110010.
  3. Divisé en octets de 8 bits : 01001101 01100001 01101110 01100111 01100101 01110010.
  4. Il s’agit de la valeur binaire d’origine. Si on tente de le décoder en ASCII, cela donne :
    1. 01001101 = 77 = ‘M’
    2. 01100001 = 97 = ‘a’
    3. 01101110 = 110 = ‘n’
    4. 01100111 = 103 = ‘g’
    5. 01100101 = 101 = ‘e’
    6. 01110010 = 114 = ‘r’
  5. Chaîne décodée : Le résultat est Manger.

Base64 dans la communication par e-mail

Dans les systèmes de messagerie, Base64 est largement utilisé dans MIME (Multipurpose Internet Mail Extensions). MIME étend le protocole de messagerie d’origine (SMTP) pour gérer le contenu non textuel comme les pièces jointes, les fichiers audio, vidéo et les images.

Lorsque vous joignez un fichier à un e-mail :

  • Le fichier binaire (par exemple, une image) est encodé en Base64 ;
  • Les données encodées sont incluses dans l’e-mail, dans le corps du message ou dans une section MIME ;
  • Un en-tête spécifie le type d’encodage, par exemple Content-Transfer-Encoding: base64.

Cela garantit la fiabilité de la transmission du fichier, même si l’e-mail transite par des systèmes ne prenant pas en charge les données binaires brutes.

Base64 dans la communication web

En développement web, l’encodage Base64 est fréquemment utilisé pour :

  1. Intégrer des images en HTML ou CSS : Les images peuvent être encodées en Base64 et intégrées directement en HTML ou CSS sous forme d’URI de données. Par exemple : html <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..." /> Ceci est particulièrement utile pour les petites images, car cela évite d’avoir à effectuer des requêtes HTTP distinctes.

  2. Authentification API : Base64 est souvent utilisé pour encoder les identifiants lors de l’authentification HTTP de base. Par exemple :
    La paire nom d’utilisateur/mot de passe (par exemple, admin:password123) est encodée en Base64 (YWRtaW46cGFzc3dvcmQxMjM=) et envoyée dans l’en-tête Authorization.

  3. Encodage des données binaires en JSON : Les API qui renvoient ou acceptent des données binaires (par exemple, des téléchargements de fichiers) peuvent utiliser Base64 pour encoder la charge utile binaire dans un format compatible JSON.

Avantages et limites de Base64

Avantages :

  • Portabilité : Assure la compatibilité avec les protocoles textuels.
  • Simplicité : Facile à mettre en œuvre et à comprendre.

Limitations :

  • Taille augmentée : L’encodage Base64 augmente la taille des données d’environ 33 %, ce qui peut entraîner des inefficacités lors du transfert de fichiers volumineux.
  • Risques de sécurité : L’encodage Base64 n’est pas un chiffrement. Les données sensibles encodées en Base64 peuvent être facilement décodées ; il est donc conseillé de toujours les associer à un chiffrement pour une communication sécurisée.

Outils utiles pour l’encodage et le décodage Base64

Cyberchef

CyberChef, une application web intuitive pour l’encodage, le décodage et la manipulation de données, est un outil pratique pour travailler avec Base64. CyberChef simplifie le processus de conversion vers et depuis Base64.

Voici un exemple d’encodage d’une chaîne ASCII en Base64 :

  1. Saisissez votre entrée dans le panneau Input ;
  2. Dans le panneau Operations de gauche, cliquez sur le titre Favourites, sélectionnez To Base64 et faites-le glisser vers le panneau central Recipe ;
  3. La chaîne convertie apparaîtra dans le panneau Output.

Cyberchef

Pour décoder une chaîne Base64, saisissez-la/collez-la dans le panneau Input et faites glisser l’entrée From Base64 vers le panneau Recipe.

Code

Vous trouverez un exemple didactique de code Python implémentant l’encodage et le décodage Base64 dans mon dépôt Codeberg.

Remarque

Ce code est fourni à titre éducatif uniquement ; il n’est ni optimisé ni renforcé pour la sécurité. Ne l’utilisez pas en production.

Conclusion

Base64 n’est peut-être pas le moyen le plus efficace de gérer des données binaires, mais son universalité et sa fiabilité le rendent indispensable pour les communications par e-mail et sur le web. Comprendre son rôle peut vous aider à résoudre les problèmes plus efficacement, qu’il s’agisse de gérer des pièces jointes endommagées, de décoder des charges utiles d’API ou d’intégrer des ressources dans des pages web. En tant que professionnel de l’informatique, une solide maîtrise de Base64 peut vous aider à naviguer dans l’interaction complexe des protocoles de communication modernes.

Accueil   Début