TP3 : Application de codage/decodage
jean-baptiste.vioix@iut-dijon.u-bourgogne.fr
R&T 2`eme ann´ee
Vous avez `a votre disposition (sur le r´epertoire commun) : le cours, les TDs,
et quelques documents provenant d’Internet. Vous devez prendre l’habitude de re-
chercher l’information dans ces documents et dans le sujet de TP. Chaque question
inutile1sera not´ee et aura des cons´equences sur la note du TP.
A la fin du TP, envoyez par mail les fichiers .java pr´esents dans le r´epertoire
src du r´epertoire TP2 de votre r´epertoire de travail Eclipse. Si je ne rec¸oit pas ces
fichiers (et seulement cela), votre note sera nulle.
N’h´esitez pas utiliser l’aide de Java : http://java.sun.com/j2se/1.5.0/docs/api/
But du TP : Utiliser les interfaces et les classes. Manipuler les String.
1 Application de codage/d´
ecodage
Avant de commencer votre TP, cr´eez un nouveau projet TP3 dans Eclipse.
1.1 Principe
On souhaite r´ealiser une application qui va permettre de crypter/d´ecrypter un
texte rentr´e par l’utilisateur. L’application sera capable d’utiliser plusieurs codes de
cryptage.
1.2 Pr´
esentation de l’application
Le diagramme UML de l’application est pr´esent´e en figure 1, utilisez le comme
base de travail, mais r´ealisez bien le tp dans l’ordre.
1.3 Classe de test
La premi`ere classe `a construire est une classe de test ayant simplement une
m´ethode main ce qui va vous permettre de pourvoir tester vos classes les unes
apr`es les autres. A la fin du TP, elle proposera diff´erentes options `a l’utilisateur.
1qui a sa r´eponse de mani`ere simple dans les fichiers fournis
1
1.4 L’interface Cryptage
Pour cr´eer une interface, utilisez l’assistant (File,New,Interface). Dans cette
interface, placez la d´eclaration des entˆetes des deux m´ethodes (sans accolades,
termin´ees par un point virgule).
1.5 La classe EncodeCesar
Cette classe encode une chaˆıne de caract`eres en utilisant le codage de C´esar
(http://fr.wikipedia.org/wiki/Chiffre de C%C3%A9sar)
Cr´eez la classe EncodeCesar en utilisant l’assistant de cr´eation de classe. En
face du champ Interfaces, cliquez sur Add puis remplissez le champ de texte avec
Cryptage (normalement Eclipse vous le propose en tapant seulement quelques
caract`eres). Automatiquement, Eclipse va rajouter les deux m´ethodes n´ecessaires
dans le code.
Cr´eez ensuite les diff´erents attributs et les entˆetes des m´ethodes restantes (dont
le constructeur).
Le constructeur EncodeCesar(int uneValeur) La valeur rec¸ue en param`etre
doit simplement ˆetre plac´e dans l’attribut valeur.
La m´
ethode void setSourceText(String string) Cette m´ethode place la chaine
rec¸ue dans l’attribut source puis appelle la m´ethode Encrypt
La m´
ethode void Encrypt() Cette m´ethode encrypte la chaˆıne d´esign´ee par l’at-
tribut source et la place dans l’attribut destination.
La principe de cryptage est le suivant :
Si le caract`ere est compris entre ’a’ et ’z’ le caract`ere est remplac´e par sa
valeur encod´e.
Si le caract`ere est compris entre ’A’ et ’Z’ le caract`ere est remplac´e par sa
valeur encod´e.
Sinon, le caract`ere (chiffre, ponctuation, . . .) n’est pas remplac´e.
Pour encoder les minuscules, la formule est la suivante :
valeur cod´e = ’a’ + ( valeur `a encoder - ’a’ + valeur ) modulo 26
On en d´eduit la formule pour encoder les majuscules.
En java, il est possible d’ajouter un entier `a un caract`ere. Apr`es des op´erations
arithm´etiques sur des char, Eclipse peut signaler une erreur et proposer un trans-
typage (cast en anglais) pour r´esoudre cette erreur. Le transtypage est une notation
du type b = (char) a. Elle consiste `a “consid´erer” la variable acomme un char
avant de la placer dans b(qui lui est un char).
L’encodage se faisant caract`ere par caract`ere la chaˆıne destination est mo-
difi´ee tr`es souvent. Pour am´eliorer les performances de votre programme il est plus
judicieux d’utiliser un objet de la classe StringBuffer comme variable temporaire
pendant l’encodage. Une fois l’encodage fini, vous n’avez plus qu’ `a construire un
objet de la classe String `a partir de cette variable temporaire puis de l’associer `a
l’attribut destination.
2
Les diff´erentes m´ethodes associ´ees aux classes String et StringBuffer sont
disponibles dans l’aide g´en´erale du langage Java sur http://java.sun.com/j2se/1.5.0/docs/a
La liste des classes est dans la partie inf´erieur gauche de la page internet.
L’impl´ementation en Java n´ecessite quelques pr´ecautions, l’op´erateur modulo
(repr´esent´e par les symbole %) n’a pas le comportement voulu (voir le d´etail sur
http://fr.wikipedia.org/wiki/Modulo %28informatique%29).
La m´
ethode int Modulo(int x, int y) Comme le modulo calcul´e par Java n’a
pas le comportement voulu, vous allez ´ecrire une m´ethode permettant de calculer
“le bon” modulo. La m´ethode int Modulo(int x, int y) renvoie le modulo de x
divis´e par y. Le modulo calcul´e par l’op´erateur %est le bon si il est positif.
Si le modulo calcul´e par l’op´erateur %est n´egatif votre fonction doit renvoyer y
+ x%y.
La m´
ethode String getCryptedText() Cette m´ethode renvoie l’attribut destination.
1.6 La classe DecodeCesar
Elle est identique `a la classe pr´ec´edente sauf qu’elle d´ecode la chaˆıne d´esign´ee
par l’attribut source et place la version d´ecod´ee dans l’attribut destination.
A partir du sch´ema UML et du travail fait ci-dessus, ´ecrivez la classe DecodeCesar
1.7 Test de vos deux classes
La fonction main de votre classe de test doit avoir deux variables de type Cryptage.
Ces deux variables seront nomm´ees moteurCryptage et moteurDecryptage. Il n’y
a pas d’erreur, le type de ces deux variables est bien une interface.
Cr´eez ensuite pour moteurCryptage un objet de type EncodeCesar avec une
valeur de d´ecalage de 5 (par exemple) et cr´eez pour moteurDecryptage un objet de
type DecodeCesar avec le mˆeme d´ecalage.
Demandez ensuite `a l’utilisateur de donner une chaˆıne de caract`ere (en utilisant
la m´ethode nextLine() d’un objet de type Scanner).
Affichez la chaˆıne encod´ee.
D´ecodez la chaˆıne et affichez le r´esultat.
1.8 Les classes DecodeVigenere et EncodeVigenere
Le codage de Vigen`ere est plus efficace que le codage de C´esar. Il est pr´esent´e
dans http://fr.wikipedia.org/wiki/Chiffre de Vigen%C3%A8re. Par rapport
au codage de C´esar, il n´ecessite une clef de cadage (une chaˆıne de caract`ere), qui
permet de calculer un d´ecalage variable contrairement au code de C´esar.
Exemple La clef de codage est le mot clef et le texte `a encoder est Linux. Une
m´ethode possible est bas´ee sur le calcul de l’ecart entre une lettre de la clef et la
lettre ’a’. Dans notre cas, les ´etapes de codage sont les suivantes :
La lettre Lsera cod´ee avec un d´ecalage valant ’c’-’a’
3
La lettre isera cod´ee avec un d´ecalage valant ’l’-’a’
La lettre nsera cod´ee avec un d´ecalage valant ’e’-’a’
La lettre usera cod´ee avec un d´ecalage valant ’f’-’a’
La lettre xsera cod´ee avec un d´ecalage valant ’c’-’a’
Travail `
a effectuer Cr´eez les deux classes DecodeVigenere et EncodeVigenere
comme pour le codage de C´esar. Les principaux point de changement sont les
constructeurs, ils rec¸oivent une chaˆıne de caract`eres qui est la clef de codage/d´ecodage
(toujours en minuscules) et les m´ethode Encrypt.
Test du cryptage de Vigen`
ere Dans la classe de test vous avez juste `a changer
les deux constructeurs des objets moteurCryptage et moteurDecryptage.
1.9 Utilisation d’un fichier source
Cette partie est destin´ee aux ´etudiants les plus avanc´es dans le TP. . .
Pour cette partie, n’h´esitez pas `a regarder l’aide de java (http://java.sun.com/j2se/1.5.0/do
ainsi que des tutoriaux sur Internet.
Dans la m´ethode de test vous pouvez utiliser un fichier texte comme donn´ees `a
encrypter/decrypter.
Les fichiers sont repr´esent´es `a l’aide de la classe File. Le constructeur de cette
classe accepte une chaˆıne de caract`eres qui repr´esente le nom du fichier.
Pour lire dans un fichier texte, on utilise un objet Scanner comme pr´ec´edemment,
le fichier (objet de la classe File) `a lire ´etant pass´e en param`etre au constructeur.
L’acc`es aux fichiers demande quelques pr´ecautions (probl`emes d’entr´es/sorties, fi-
chier non existant,. . .) qui sont g´er´ees par les exceptions. Lorsque vous travaillerez
sur cette partie, Eclipse vous signalera une erreur du type “Unhandled exception
type FileNotFoundException”, demandez `a l’enseignant des explications. . .
Pour ´ecrire dans un fichier, on utilise un objet de type PrintWriter. Il peut ˆetre
construit en plac¸ ant le fichier `a ´ecrire en param`etre du constructeur. Ensuite, la
m´ethode println est utilis´ee comme pour ´ecrire du texte sur le terminal.
4
Interface Cryptage
+ setSourceText(Chaine unTexte) :
+ getCryptedText() : Chaine
EncodeCesar
- source : Chaine
- destination : Chaine
- valeur : entier
+ EncodeCesar(entier uneValeur)
+ setSourceText(Chaine unTexte) :
+ getCryptedText() : Chaine
- Encrypt() :
- Modulo(Entier x, Entier y) : Entier
DecodeCesar
- source : Chaine
- destination : Chaine
- valeur : entier
+ DecodeCesar(entier uneValeur)
+ setSourceText(Chaine unTexte) :
+ getCryptedText() : Chaine
- Encrypt() :
- Modulo(Entier x, Entier y) : Entier
EncodeVigenere
- source : Chaine
- destination : Chaine
- clef : Chaine
+ EncodeVigenere(Chaine laClef)
+ setSourceText(Chaine unTexte) :
+ getCryptedText() : Chaine
- Encrypt() :
- Modulo(Entier x, Entier y) : Entier
DecodeVigenere
- source : Chaine
- destination : Chaine
- clef : Chaine
+ DecodeVigenere(Chaine laClef)
+ setSourceText(Chaine unTexte) :
+ getCryptedText() : Chaine
- Encrypt() :
- Modulo(Entier x, Entier y) : Entier
FIG. 1 – Sch´ema UML des diff´erents ´el´ements du programme
5
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !