MIME: Base 64


Voyons quand même un peu de code avec les spécificités de l'encodage base64. L'encodage base64 est très simple, on prend des données encodées sur 8bits et on les modifie pour qu'il n'y ait plus que 7 bits utiles. Cela permet de transférer des informations codées en 8 bits sur des équipements ne supportant que le 7bits (comme le protocole SMTP).

Pour cela on prend les données par paquet de trois octets. On a donc 24bits. On va découper ces 24bits en 4 paquets égaux de 6 bits que l'on va ensuite translater dans une table de 7bits. On a donc 3 octets encodés dans 4 à l'arrivée (ce n'est pas très efficace pour une gestion tendue de la bande passante). Chaque paquet de 6 bits est donc un entier compris entre 0 et 63 (d'où base64). Les caractères sont translatés pour utiliser les caractères suivants:

  • De 0 à 25 : A à Z
  • De 26 à 51 : a à z
  • De 52 à 61 : 0 à 9
  • 62 : +
  • 63 : /


Le résultat est un message encodé qui contient un nombre de caractères multiple de 4. Si il n'y a pas suffisamment de données, on complète avec le caractère égal (=). On utilise donc au total 65 caractères, il faut donc que le système supporte l'encodage en 7bits.

Pour le décodage, c'est très simple, on prend un paquet de 4 octets que l'on va encoder pour retrouver les 3 octets d'origine.

Voyons un exemple d'encodage et de décodage de données au format base64. Les codes qui suivent sont écrit en C et permettent l'encodage/décodage d'un fichier ou des données de l'entrée standard. Le résultat apparaît dans le fichier spécifié en paramètre ou sur la sortie standard.

Pour simplifier, on ne tient ici pas compte du format imposé par MIME sur la longueur maximale des lignes. Cela ne devrait cependant pas être le plus compliqué à gérer.