Introduction à la Programmation (L1I1) Licence Math

Transcription

Introduction à la Programmation (L1I1) Licence Math
Introduction à la Programmation (L1I1)
Licence Math-Info 1ère année
TP n° 9, 2006-2007
Sur le modèle du codage de César détaillé en cours, on va implémenter en Java le codage de
Vigenère et le codage par substitution. Pour cela on téléchargera sur le site du cours
(http://deptinfo.unice.fr/~fmallet/L1I1) ou dans les « Documents de cours » le projet TP9.
Ce projet contient pour l’instant deux classes. La classe CodeCesar qui implémente le
codage et le décodage de César. La classe Test qui nous permettra de tester nos classes.
Le codage de César
Exercice 9.1 : Commencer par tester la classe CodeCesar avec et sans la classe Test.
1. Écrire dans la classe Test, une méthode casseCesar() qui essaye toutes les clés
possibles (en créant autant d’objets de type CodeCesar que nécessaire) et affiche tous
les messages clairs qui ont pu générer le message codé "QCAPCR". Quel est le message
clair d’origine ?
2. Quelle clé a été utilisée pour obtenir ce message ?
Le codage par substitution
Exercice 9.2 : On veut implémenter l’algorithme de codage par substitution présenté en cours
aux transparents 9-35 et 9-37.
1. Créer une classe CodeSubstitution avec un attribut cle de type String.
2. Ajouter un constructeur sans paramètre qui initialise la clé à la valeur par défaut
3.
4.
5.
6.
"LEZBUOITAVDMNPHYRCFGJKQSWX".
Recopier la méthode code(String) : String
de la classe CodeCesar et s’assurer que
cette méthode fonctionnera également pour le code par substitution.
Sur le modèle de la méthode code(char) : char de la classe CodeCesar et la
modifier pour implémenter le codage par substitution.
Recopier la méthode decode(String) : String de la classe CodeCesar et
implémenter la méthode decode(char) : char. Attention, il faut retrouver le
caractère initial à partir de la clé privée. C’est un peu plus compliqué.
Écrire dans la classe Test, une méthode testSubstitution() qui montre que votre
classe fonctionne correctement.
Le codage de Vigenère
Exercice 9.3 : On veut implémenter l’algorithme de codage de Vigenère présenté en cours
aux transparents 9-38 et 9-39.
1. Créer une classe CodeVigenere avec un attribut cle de type String.
2. Ajouter un constructeur avec un paramètre qui donne la valeur initiale de la clé privée.
3. Recopier les méthodes code(String) : String et decode(String) : String de la
classe CodeCesar et s’assurer qu’elles ne sont pas complètement adaptées à l’algorithme
de Vigenère. Les modifier pour que les méthodes de codage et de décodage des caractères
connaissent en plus la position du caractère dans la chaîne.
4.
5.
Implémenter les méthodes code(char, int) : char et decode(char, int) :
char pour coder et décoder seulement le codage de Vigenère.
Écrire dans la classe Test, une méthode testVigenere() qui montre que votre classe
fonctionne correctement.
Exercice supplémentaire
Exercice 9.4 : Modifier le constructeur sans paramètre de la classe CodeSubstitution qui
génère une clé de façon pseudo-aléatoire. Pour cela, on peut par exemple commencer par
construire la clé "ABCDEFGHIJKLMNOPQRSTUVWXYZ" puis permuter chaque lettre au
moins une fois avec une autre lettre choisie de façon pseudo-aléatoire.
Exercice 9.5 : Ajouter un constructeur sans paramètre à la classe CodeVigenere qui génère
une clé de façon pseudo-aléatoire. Pour cela, il faut choisir d’abord une longueur raisonnable
pour la clé, puis chacun des caractères de la clé.
Exercice 9.6 : Ajouter dans la classe CodeVigenere une méthode statique qui génère la
table de codage présentée dans le cours au transparent 9-39.
Exercice 9.7 : Comparer le résultat du codage d’un message comme "AAAA" avec les trois
algorithmes étudiés.