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.