Accueil site MathGraph32 Images Activités Tableur Téléchargements Informations



Algorithmique

Avec Python

Cryptographie 
 
Introduction
Initiation
  Généralités
  Première activité
  Calcul d'une racine carrée
  Exemple en géométrie
  Exemple avec Logo
Prolongement
  Symétrie centrale
  Parallélogramme
  Procédures avec Logo
  Récursivité avec Logo
Avec Algobox
  Fraction irréductible
  Fonction monotone
  Résolution d'équation 1
  Résolution d'équation 2
Avec Python
  Environnement
  Autres environnements
  L'essentiel
  Premier exemple
  Addition de fractions
  Cryptographie
  Statistiques / Probabilité
Avec Java
  Environnement
  L'essentiel
  Premier exemple
  Avec des classes
 
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 :
  • les lettres A à Z sont représentées par les codes ASCII allant de 65 à 90
  • les lettes a à z sont représentées par les codes ASCII allant de 97 à 122
  • les caractères accentués sont dans la plage [128 ; 255]
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 :


© Matabu mars 2020 - Tous droits réservés. Limitation à l'usage non commercial, privé ou scolaire.