le code de vigenère

Merci !

Exercices
Classe(s) : Tle S | Thème(s) : Arithmétique

Partie A. Expérimentation.

On cherche à coder le message RENDEZ VOUS A MIDI avec la clef de codage DEPART.

On répète la clef en face du message à coder (sans les espaces) autant de fois que nécessaire, puis on numérote les lettres de la clef en associant à A la position 0, à B la position 1 etc. Chacun de ces numéros détermine le décalage des lettres du message : la lettre R, en face de la lettre D dans la clef, sera décalée de 3 places dans l’alphabet etc. Bien sûr, lorsque l’on arrive au bout de l’alphabet . . . on recommence à A !

1. Compléter le tableau suivant.

Message

R

E

N

D

E

Z

V

O

Clé

D

E

P

A

R

T

D

E

Numéro

3

4

15

0

17

19

   

Code

U

I

C

D

V

S

   

Message

U

S

A

M

I

D

I

Clé

             

Numéro

             

Code

             

2. En déduire le message codé.

3. Pour le décodage, on utilise la même méthode, mais le décalage se fait « en sens inverse ».

Décoder le message PGYZWTPHDYT, avec la clef de codage PLUIE.

Ce type de codage nécessite que le destinataire connaisse à l’avance le mot clef utilisé pour le codage. Il ne s’agit pas d’une clef publique comme pour le codage RSA par exemple.

Partie B. Codage avec Algobox.

Pour automatiser la procédure de codage, on va numéroter également les lettres du message et de la clef en employant le codage ASCII très commun en informatique : il consiste à associer à chaque caractère (lettre de l’alphabet, chiffre, signe de ponctuation, ...) un code numérique entier, compris entre 0 et 255, que l’on appelle son code ASCII.

Par exemple, le code de A est 65, celui de B est 66, celui de a est 97, celui de l’espace est 32... Pour retrouver la position de la lettre A (par exemple) dans l’Alphabet, il suffira de soustraire 65 à son code ASCII.

Pour une introduction au codage ASCII, on traitera avec profit l’exercice 34.

1. Saisir le programme suivant sous Algobox :

VARIABLES

message EST_DU_TYPE CHAINE

longueur_message EST_DU_TYPE NOMBRE

clef EST_DU_TYPE CHAINE

longueur_clef EST_DU_TYPE NOMBRE

i EST_DU_TYPE NOMBRE

code_lettre EST_DU_TYPE NOMBRE

decalage EST_DU_TYPE NOMBRE

lettre EST_DU_TYPE CHAINE

DEBUT_ALGORITHME

LIRE message

LIRE clef

longueur_message PREND_LA_VALEUR message.length

longueur_clef PREND_LA_VALEUR clef.length

POUR i ALLANT_DE 1 A longueur_message

DEBUT_POUR

code_lettre PREND_LA_VALEUR message.charCodeAt(i-1)-65

decalage PREND_LA_VALEUR clef.charCodeAt((i-1)%longueur_clef)-65

lettre PREND_LA_VALEUR String.fromCharCode(65+(code_lettre+decalage)%26)

AFFICHER lettre

FIN_POUR

FIN_ALGORITHME

Syntaxe Algobox : Le message à coder sera rentré sous la forme d’une chaine de lettres majuscules. Appelons cette chaine message.

message.length renvoie un nombre égal à la longueur de la chaine message.

message.charCodeAt(i) renvoie le code ASCII du caractère situé au rang i dans la chaine message.

Attention : une chaine est une liste de caractères numérotés à partir du rang 0. La boucle POUR permet ici de remplir cette liste un terme après l’autre.

a%b renvoie le reste de la division euclidienne de a par b.

2. À quelle partie du codage correspond la ligne : decalage PREND_
LA_VALEUR clef.charCodeAt((i-1)%longueur_clef)-65 ?

3. Que fait l’instruction : lettre PREND_LA_VALEUR
String.fromCharCode(65+(code_lettre+decalage)%26) ?

4. Tester cet algorithme pour retrouver le code de la partie A. 1.

Partie C. Décodage avec Algobox.

La commande String.fromCharCode(N) renvoie la lettre dont le code ASCII est N.

Modifier le programme précédent pour qu’il décode le message donné à la partie A.3.

Attention : le décalage donne parfois à la lettre une position négative dans l’alphabet . . . ce qui lui vaudra un code ASCII faux. Il faudra y remédier !