Modifications entre les versions 1 et 12 (s'étendant sur 11 versions)
Version 1 à la date du 2012-11-21 18:33:21
Taille: 2179
Éditeur: roq13-2-78-235-210-46
Commentaire:
Version 12 à la date du 2013-11-06 14:16:29
Taille: 2910
Éditeur: LionelVaux
Commentaire:
Texte supprimé. Texte ajouté.
Ligne 2: Ligne 2:

C’est la séance [[1B1]] de la formation 2013-2014.
Ligne 21: Ligne 23:
 * la fonction `chr`, inverse de la précédente.  * la fonction `chr`, inverse de la précédente ;
 * l’opération `%`, qui calcule le reste de la division euclidienne.
On a donc par exemple :
 * `ord('a')` est le code de la lettre `a` ;
 * `ord('b')-ord('a') == 1` ;
 * `chr(ord('a')+12) == 'm'` ;
 * `ord('a')+ (ord('z')-ord('a')+11) % 26 == ord('k')`
Ligne 25: Ligne 33:

En fait, il y en a une à laquelle vous ne couperez pas :
{{{#!highlight python
def cesar1(lettre,cle):
 ...
 return code
}}}
qui applique le chiffre de César à une seule lettre.
Ligne 43: Ligne 60:
Par exemple, si on chiffre `'information'` avec la cle `cle`, on obtient :
{{{
mot à coder : information
clé répétée : clecleclecl
code obtenu : kyjqcqcemqy
}}}
Ligne 59: Ligne 83:
Le sujet du TP de rentrée du niveau 2 propose une méthode de cryptanalyse du Le sujet du TP de rentrée du niveau 2 en 2012-2013 proposait une méthode de cryptanalyse du
Ligne 61: Ligne 85:
de l’indice de coïncidence. Le sujet est disponible en ligne sur [[http://isn.irem.univ-mrs.fr/formation/]]. de l’indice de coïncidence. Le sujet est disponible en ligne sur [[http://isn.irem.univ-mrs.fr/2012-2013/formation/module/2/]].

C’est la séance 1B1 de la formation 2013-2014.

Chiffre de César

Écrivez une fonction :

   1 def cesar(message,cle):
   2         ...
   3         return code

qui renvoie le code du message, suivant le chiffre de César paramétré par l’entier cle. Pour mémoire, cela signifie que chaque lettre du message est remplacée par la lettre qui se trouve cle « cases » plus loin dans l’alphabet, quitte à revenir au début si on a atteint la fin de l’alphabet.

On pourra d’abord se contenter de transformer les lettres de l’alphabet latin, et on laissera les autres caractères inchangés.

Deux outils cruciaux :

  • la fonction ord, qui renvoie le numéro d’un caractère (et on admet que les lettres ont des codes consécutifs) ;

  • la fonction chr, inverse de la précédente ;

  • l’opération %, qui calcule le reste de la division euclidienne.

On a donc par exemple :

  • ord('a') est le code de la lettre a ;

  • ord('b')-ord('a') == 1 ;

  • chr(ord('a')+12) == 'm' ;

  • ord('a')+ (ord('z')-ord('a')+11) % 26 == ord('k')

N’hésitez bien sûr pas à définir des fonctions auxiliaires pour décomposer le travail. Elles pourront aussi être utiles pour la suite.

En fait, il y en a une à laquelle vous ne couperez pas :

   1 def cesar1(lettre,cle):
   2         ...
   3         return code

qui applique le chiffre de César à une seule lettre.

Faut-il écrire une autre fonction pour le décodage ?

Chiffre de Vigenère

Le chiffre de Vigenère généralise celui de César : la clé est maintenant un mot. Dans cette clé :

  • la lettre A représente un décalage de 0,

  • la lettre B représente un décalage de 1,

  • la lettre C représente un décalage de 2,

L’idée du code est la suivante :

  • on décale la première lettre du message d’après la première lettre de la clé ;
  • on décale la deuxième lettre du message d’après la deuxième lettre de la clé ;
  • quand on a épuisé la clé, on revient à sa première lettre…

Par exemple, si on chiffre 'information' avec la cle cle, on obtient :

mot à coder : information
clé répétée : clecleclecl
code obtenu : kyjqcqcemqy

Écrivez des fonctions :

   1 def vigenere(message,cle):
   2         ...
   3         return code

et

   1 def devigenere(code,cle):
   2         ...
   3         return message

qui réalisent le codage et le décodage.

Pour aller plus loin

Le sujet du TP de rentrée du niveau 2 en 2012-2013 proposait une méthode de cryptanalyse du chiffre de Vigenère, basée sur la détection de motifs répétés et le calcul de l’indice de coïncidence. Le sujet est disponible en ligne sur http://isn.irem.univ-mrs.fr/2012-2013/formation/module/2/.

WikISN: TP sur les codes de César et de Vigenère (dernière édition le 2016-01-29 15:26:31 par LionelVaux)