base64 est un protocole d'encodage des fichiers, pour permettre leur
transmission dans un environnement qui ne connaît que les caractères
codés sur 7 bits.
L'histoire de l'informatique a vu défiler de nombreux jeux de
caractères; citons:
le plus connu, l'ASCII (dont le nom exact est iso-646);
c'est un jeu de caractères codés sur 7 bits, et qui comporte
donc 128 caractères;
le jeu de caractères iso-8859-1, codé sur 8 bits;
Unicode (dont le nom exact est iso-10646), codé sur 16
bits.
Il a existé des jeux de caractères à 6 bits,
voire 5 bits (télégraphes).
base64 est un protocole d'encodage des fichiers, pour permettre leur
transmission dans un environnement qui ne connaît que les caractères
codés sur 7 bits.
Notez bien qu'il s'agit d'encodage, et non de cryptage. On parle aussi de
codage de canal.
base64 prend en entrée un flux de caractères codés sur 8 bits;
chaque groupe de trois caractères est découpé en quatre paquets de
6 bits; chaque paquet est codé par un caractère imprimable
(lettre majuscule ou minuscule, chiffre, signe "+" ou "/".
Si la taille du fichier n'est pas mutiple de 3, le dernier groupe lu
permet de produire deux ou trois caractères, qui seront
complétés par un ou deux caractères "=".
Le flux de sortie est découpé en lignes de 76 caractères
au plus.
Votre objectif
Écrire en Caml un encodeur et/ou un décodeur base64.
Documents disponibles
le texte de la RCF 1521:
décrit précisément l'encodage.
consultez le mode d'emploi de uuencode et uudecode;
pour ce faire, ouvrez un terminal et passez les commandes
man uuencode et man uudecode;
pour quitter chacune de ces pages, tapez simplement q;
l'aide Caml:
vous serez amenés à utiliser les fonctions
open_in, open_out, input_byte,
output_string, close_in et close_out.
Pour "aller à la ligne" dans le fichier de sortie, utilisez
output_string f "\n", où f est le résultat rendu
par open_out.
un corrigé de la fonction d'encodage se trouve
ici.