chapitre 7 Information et données 4 Exercice 3 : cryptographie par substitution de lettres
TD : Découverte de la cryptographie Partie 1 : le code César
Il s’agit d’une méthode de cryptographie qui consiste à remplacer une lettre de l’alphabet par
Seul un ordinateur éteint, enfermé dans un coffre-fort et enterré six pieds
sous terre dans un endroit tenu secret peut être considéré comme sécurisé, une autre décalée de 3 (ou un autre décalage). Par exemple, CESAR est codé par FHVDU.
et encore. Bruce Schneier 1) Écrire une fonction cesar_chiffre(chaine,cle) qui code la chaîne entrée avec un décalage
de cle. On vérifiera assert(cesar_chiffre('CESAR',3)=='FHVDU')
Bien sur, en cryptographie, tous les caractères non alphabétiques sont 2) Expliquer comment déchiffrer un texte dont on connait le décalage et écrire la fonction
supprimés du texte à coder. Sans quoi, ils donnent des indices trop correspondante.
importants en permettant d’identifier le nombre de lettres des mots. 3) On vaut décoder le message 'KAJEXEXDBJENICAXDEN'.
On pourra donc réutiliser la fonction nettoye de l’exercice 13 Combien y a-t-il de décalages possibles ? On va décrypter par une méthode brutale : écrire
un script qui va tester tous les décalages possibles. Quel est le message d’origine ?
Exercice 1 : Simple encodage
Décodez le texte du fichier 7_TD_exo1.py, encodé en ISO-8859-1. Partie 2 : chiffrage par permutation
On utilise un tableau pour coder les substitutions. Par exemple
Lettre origine A B C D E F G H I J K L M
Exercice 2 : cryptographie par le code binaire Lettre codée D Y X T L J O E N B M R V
1) a) Écrire une fonction retourne(chaine) qui renvoie la chaine en Lettre origine N O P Q R S T U V W X Y Z
argument écrite à l’envers.
Lettre codée F K C A H W Q S U Z I P G
b) Écrire une fonction inverse(chaine) dont l’argument est une chaîne
constituée de 0 et de 1 et qui renvoie la chaine obtenue en remplaçant les 0
1) a) Écrire une fonction crypte_lettre(tableau,lettre) qui prend une lettre et retourne la lettre
par des 1 et inversement
obtenue avec le cryptage défini par le tableau.
2) Écrire une fonction qui prend un texte et renvoie la chaîne binaire
b) Écrire une fonction crypte_texte(tableau,texte) qui renvoie le texte ainsi crypté.
correspondant à son encodage en latin-1 (comme dans l’énoncé de l’exo 1)
Par exemple crypte_texte(tableau,"Bienvenue en NSI") donne 'YNLFULFSLLFFWN'
3) Coder la méthode de cryptographie suivante :
2) Combien y a-t-il de tableaux de cryptage différents ? En essayant 1000 possibilités par
Le texte d’origine est nettoyé (cf exo 13) puis traduit en binaire à l’aide de
seconde, combien de temps faudrait-il pour décrypter par force brute un texte ainsi crypté ?
la question 2. Ensuite, on modifie le code binaire à l’aide d’une des
fonctions de la question 1. Enfin, on traduit le code binaire obtenu en un Partie 3 : pour aller plus loin : Au choix :
texte qu’on affiche. * réfléchir à une méthode pour décrypter le chiffrage de la partie 2
* Chercher des informations sur le chiffre de Vigenère et l’implémenter.
010000010111010001110100011001010110111001110100011010010110111101101110001011000010000001
100011011001010010000001101101011001010111001101110011011000010110011101100101001000000110
000100100000011001010110111000100000011001100110000101101001011101000010000011000011101010
010111010011000011101010010010000001100101011011100110001101101111011001001100001110101001
001000000110010101101110001000000101010101010100010001100010110100111000001000000010000100
001010000010100101010101101110001000000111000001100001011011100110011101110010011000010110
110101101101011001010010000000111010001000001100001010101011110000101010000001110110011011
110110100101111000001000000110000101101101011000100110100101100111011101011100001110101011
001000000110010000100111011101010110111000100000011000111100010110010011011101010111001000
100000011100010111010101101001001011000010000001100001011101010010000001111010110000111010
100101110000011010000111100101110010001011000010000001110000011100101100001110101001011001
101100001110101000011100100110010100100000011011000110010101110011001000000110101001100001
011101000111010001100101011100110010000001100100011001010010000001101011011010010111011101
101001011100111100001010100000110000101011101100101110000010100000101001000101011011100110
001101101111011001000110010101111010001000000110110001100001001000000111000001101000011100
100110000101110011011001010010000001100100001001110110100101101110011101000111001001101111
011001000111010101100011011101000110100101101111011011100010000001100100011001010010000001
100011011001010111010000100000011001010111100001100101011100100110001101101001011000110110
010100100000011001010110111000100000010101010101010001000110001011010011100000101110