|
Algorithmique |
| |||||
Un ordinateur ne peut exécuter un programme ou gérer des données que sous forme binaire (suite de 0 et de 1); Pour les textes saisis au clavier ou enregistrés, on doit donc associer à chaque caractère un code (quel que soit le système utilisé, c'est un nombre entier). C'est, par exemple, ce code qui permet dans un traitement de texte de représenter à l'écran les caractères tapés au clavier.
Pour protéger un texte, on peut le transformer pour qu'il ne soit plus lisible par tout le monde mais seulement par les personnes qui connaissent la transformation ou plus exactement la transformation inverse qui rétablira le texte d'origine. On fait alors du cryptage à l'aide d'une ou plusieurs clés. L'dée, pour un cryptage simple d'un texte, est d'utiliser le code x (utilisé par l'ordinateur) de chaque caractère du texte et de leur appliquer une fonction f pour afficher le caractère de code f(x) à la place du caractère de code x. Pour décrypter le texte, il suffit d'appliquer la fonction inverse. Il faut connaître le système de codage utilisé par son ordinateur, plus exactement utilisé par le système d'exploitation (Windows, Linux, ...). En effet, plusieurs systèmes de codage sont apparus au cours du temps. On peut retenir (avec Windows Xp et versions ultérieures) que les codes doivent être dans la plage [0, 55295] et que les caractères utilisés dans la langue française sont dans la plage [0, 255], plus précisément pour les lettres de l'alphabet :
Première partie Le premier exercice sera donc de créer un petit programme permettant d'afficher le caractère correspondant au code donné puis de faire l'inverse. On utilisera les fonctions ord() et chr() du langage python qui donnent respectivement le code d'un caractère donné et le caractère d'un code donné. La fonction input() renvoyant une chaîne de caractères, il faut la convertir en un entier par la fonction int(). On peut ainsi obtenir le code des caractères accentués (é, è, à) et de quelques autres caractères (ç, @, #, &, ...) Quel est le caractère obtenu avec le code (unicode) 8730 ? Deuxième partie Créons un petit programme qui transforme un texte avec un cryptage utilisant une fonction linéaire f telle que f(x)=ax où a est un entier naturel. Naturellement il faudra veiller à ce que le code obtenu après application de la fonction f ne dépasse pas 65534. On considérera que le texte écrit en français n'aura aucun caractère dont le code dépassera 255. Ce programme devra comporter deux fonctions (une pour le codage et l'autre pour le décodage) qui n'appliquent respectivement que la fonction f ou la fonction inverse aux codes des caractères. Deux autres fonctions seront chargées d'extraire pour le codage (respectivement le décodage) les codes des caractères du texte tapés et de renvoyer la chaîne codée (respectivementdécodée). Le programme principal ne s'occupe que des entrées et d'appeler les fonctions pour les sorties. Télécharger ce programme pour Python. En exécutant ce programme, on obtient par exemple : Troisième partie Même exercice que le précédant mais en utilisant une fonction affine f, telle que f(x) = x + b Le programme diffère peu du précédent. Télécharger ce programme pour Python. Quatrième partie Même exercice que le précédant mais en utilisant une fonction affine f, telle que f(x) = ax + b. Il faudra introduire la saisie d'une deuxième clé (pour b) et chercher la fonction inverse. On pourra prendre arbitrairement un petit nombre pour la première clé (pour a) et calculer la limite supérieure de la deuxième clé. Télécharger ce programme pour Python. En exécutant ce programme, on obtient par exemple : |