Zhentao Li's Homepage

email: firstname.lastname@ens.fr

 // home


Cours

Les transparents du deuxième cours sont disponibles ici: ici et ici

La version longue des transparents est ici

Communiquer ici (pour copier des ligne de programmes)

Exercice 1 - Listes et tri

  1. Écrire un programme qui affiche tous les caractères d'une chaîne de caractères en mettant un par ligne.

  2. Écrire une fonction qui prend une liste en argument et détermine si elle contient un doublon.

  3. À partir de trois entiers a, b et c entrés au clavier par l'utilisateur, écrire un programme qui les affiche dans l'ordre croissant.

Exercice 2 - La crypto c'est rigolo

2.1 Cryptographie

  1. Dans un interpréteur Python créez la chaîne de caractères message contenant la valeur 'ceci est mon message a chiffrer'. A l'aide d'une boucle for sur cette chaîne, chiffrer la par un décalage de 3 (chiffre de César). Par exemple la lettre a sera chiffrée en la lettre d (et la lettre x en la lettre a).

  2. Écrire un script Python qui chiffre (ou déchiffre selon le choix de l'utilisateur) une chaîne de caractères entrée au clavier avec une clé (i.e.un décalage) choisi aussi par l'utilisateur. On définira les fonctions chiffrer et dechiffrer.

    $ python chiffeur.py 
    Entrer le texte a chiffrer/dechiffrer : ceci est un autre message a chiffrer
    Entrer le decalage (0 a 26) : 12
    Entrer 'c' pour chiffrer ou 'd' pour dechiffrer : c
    oqou qef gz mgfdq yqeemsq m oturrdqd
    $ python chiffeur.py 
    Entrer le texte a chiffrer/dechiffrer : oqou qef gz mgfdq yqeemsq m oturrdqd
    Entrer le decalage (0 a 26) : 12
    Entrer 'c' pour chiffrer ou 'd' pour dechiffrer : d
    ceci est un autre message a chiffrer
  3. Modifier le script précédent pour qu'il utilise la méthode de chiffrement de Vigenère : la clé est désormais une chaîne de caractères et le chiffrement se fait en décalant la i-ème lettre du message gràce à la i-ème lettre de la clé (on reprend au début de la clef quand on a fini de lire celle-ci) suivant la règle naturelle A=1,B=2,...,Z=26(=0).

  4. Modifier le script précédent pour qu'il chiffre/déchiffre un fichier dont le chemin est entré par l'utilisateur. On pourra utiliser cette nouvelle de Edgar Poe pour tester le script.

    Pour obtenir le contenu d'un fichier a partir de son nom, vous pouvez utiliser. Nous verrons plus en détail les fonctions reliés aux fichiers au prochain cours.

    nom_fichier = "Poe.txt"
    contenu_fichier = open(nom_fichier).read()

2.2 Cryptanalyse

Cryptanalyse

Comme expliqué dans la nouvelle de E. Poe, les chiffrements par substitution alphabétique peuvent être casser facilement par une analyse fréquentielle. Par exemple, dans un texte écrit en langue française, la lettre la plus fréquente est généralement le "E" et puisqu'un chiffrement de César ne modifie pas les fréquences, la lettre qui apparaît le plus fréquemment dans le texte chiffré correspond vraisemblablement à "E" et si c'est le cas le décalage entre les deux lettres donne la clé et permet de retrouver l'intégralité du message clair.

  1. Écrire une fonction Python qui prenant en entrée une chaîne de caractères (ou un fichier texte) affiche la fréquence des caractères qui le composent.

  2. Modifier le programme précédent pour qu'il affiche la lettre qui apparaît le plus de fois.

  3. Utiliser cette fonction pour créer une fonction qui prend en entrée un texte chiffré avec le chiffrement de César (mais pas la clé) et retourne un texte clair associé. On pourra demander à l'utilisateur de valider que ce texte est correct (et si ce n'est pas le cas proposer un nouveau texte clair probable).

  4. **L'encyclopédie Wikipedia propose un article expliquant une méthode de cryptanalyse du chiffrement de Vigenère reposant sur les mêmes principes. Écrire une fonction Python qui prend un entrée un texte chiffré avec le chiffrement de Vigenère (mais pas la clé) et retourne un texte clair associé possible.


Website design modified from Sliqua taken from OSWD