DEUG MIAGE

Structure de Données et Programmation

 

Travaux dirigés

Série n°5


This document is the API specification for the Java 2 Platform, Standard Edition, version 1.3.1

This document is the API specification for the Java 2 Platform, Standard Edition, version 1.4.2


EXERCICE 1 : Afficher des Tableaux aléatoires …

 

EXERCICE 2 : Codage de César

 

EXERCICE 3 : Carré de Vigenère

 

EXERCICE 4 : Codage de Hill

 


EXERCICE 1 : Afficher des Tableaux aléatoires      Exo1.java


A)    Ecrire une méthode String arrayToString(int[] t) qui retourne une chaîne de caractères donnant une description textuelle d’un tableau de nombres entiers. Par exemple int[] table={4,100,21} ; System.out.println(arrayToString(table)) affichera la chaîne :

"{4   ,    100  ,    21}"

 

B)     Ecrire une méthode int[] initTableau(int taille, int max) qui retourne un tableau de nombres entiers aléatoires. Le premier paramètre taille représente la taille du tableau, le second max représente l’intervalle [0,max] dans lequel les valeurs seront choisis.

 


EXERCICE 2 : Codage de César          Exo2.java


L’empereur César codait ses messages en décalant les lettres de l'alphabet de trois crans vers la gauche.

A) Ecrire une méthode void crypter(char[] message, byte d) qui code un message passé en paramètre en utilisant un décalage de d lettres de l’alphabet. Vous pourrez utiliser la méthode main suivante pour tester votre solution :

public static void main(String str []){

        char [] message={'a','v','e','c','e','a','s','a','r'} ;

        //char [] message={'o','u','i'} ;

        byte decalage=10;

        System.out.print("MESSAGE NON CRYPTER : "); System.out.println(message);

        crypter(message,decalage);System.out.print("MESSAGE CRYPTER : "); System.out.println(message);

        //deCrypter(message,decalage);System.out.print("MESSAGE DECRYPTER : ");System.out.println(message);

    }

B) Ecrire une méthode void deCrypter(char[] message, byte d) qui décode un message passé en paramètre en utilisant un décalage de d lettres de l’alphabet.

 

C) Utiliser le framework de test unitaire Junit pour tester votre programme.

 


EXERCICE 3 : Carré de Vigenère         Exo3.java


Vigenère utilise 26 alphabets décalés pour chiffrer un message. Il utilise une clef qui définit le décalage pour chaque lettre du message à crypter ; ainsi une même lettre sera chiffrée de différentes manières.

A)    Ecrire une méthode void crypter(char[] message, char[] clef) qui code un message passé en premier paramètre en utilisant la clef passée en second argument. A chaque lettre du message à crypter on fait correspondre une lettre de la clef  (la clef étant répétée autant de fois que nécessaire). La lettre du message crypté sera prise dans la colonne correspondante à la lettre message, et dans la ligne correspondante à la lettre de la clef. Vous pourrez utiliser la méthode main suivante pour tester votre solution :

public static void main(String str []){

        initTableauAphabet();

        char [] message={'a','v','e','c','e','a','s','a','r'} ;

        char [] clef   ={'m','i','a','g','e','m','i','a','g','e','m','i','a','g','e','m','i','a','g','e'};

        System.out.print("MESSAGE NON CRYPTER : ");System.out.println(message);

        crypter(message,clef);

        System.out.print("MESSAGE CRYPTER     : ");System.out.println(message);

        deCrypter(message,clef);

        System.out.print("MESSAGE DECRYPTER   : ");System.out.println(message);

    }

 

B)     Ecrire une méthode void deCrypter(char[] message, char[] clef) qui décode un message passé en paramètre en utilisant la clef passée en second argument.

 


EXERCICE 4 : Codage de Hill   Exo4.java


L’idée de Hill n'est plus de coder lettres par lettres, mais de coder simultanément des groupes de 2 lettres!

q       Remplacer chaque lettre par son ordre dans l'alphabet : A devient 0, B devient 1,..., Z devient 25.

q       Calculer pour chaque bloc de 2 nombres à coder x1x2, les combinaisons linéaires :

y1 = ax1+bx2
y2 = cx1+dx2

q       Ramener les résultats y1 et y2 dans l’intervalle 0..25 en prenant leur reste dans la division par 26.

q       Transformer y1 et y2 en lettres.

Le choix de la clé correspond ici au choix des quatre entiers a,b,c,d.

 

A)Vérifier, à la main, que le message "election" crypté avec la clef {3, 5, 1, 2} est "pawitdjo". Toutes les clefs sont-elles valident pour un codage de Hill ?

 

B) Ecrire une méthode void crypter(char[] message, int[] clef) qui code un message passé en premier paramètre en utilisant la clef passée en second argument (on pourra supposer que le message contient un nombre pair de lettres).

 

C) Ecrire une méthode void deCrypter(char[] message, int[] clef) qui décode un message passé en paramètre en utilisant la clef passée en second argument.

 

http://www.bibmath.net/crypto/poly/hill.php3


 

Signaler une erreur - Proposer une amélioration -

 

Haut du document