1ère NSI - TP - Chiffrage d'un texte - Exercices

Exercice 1 - Codage César 876

Validé !

Le codage César est un manière de chiffrer un message de manière simple : on choisit un nombre (appelé clé de codage) et on décale toutes les lettres de notre message du nombre choisi.
Par exemple, avec une clé de codage égale à 3, la lettre A devient la lettre D, la lettre B devient E etc... Si on « dépasse » Z, on revient alors au début de l’alphabet.

Les caractères à coder font partie d'un certain alphabet, qui est une chaîne de caractères. Dans les questions suivantes, on considère que l'alphabet utilisé est "ABCDEFGHIJKLMNOPQRSTUVWXYZ". Seuls les caractères présents dans cet alphabet seront codés, les autres resteront inchangés.

Question 1 : écrire une fonction codageLettreCesar(caractere, cle) qui retourne, pour un alphabet connu, le codage de caractere pour une clé donnée.

>>> codageLettreCesar("B", 3) 'E'

Si le caractère à coder n'est pas dans l'alphabet, la fonction retourne simplement le caractère.

Question 2 : écrire une fonction codageCesar(chaine, cle) qui retourne, pour un alphabet connu, le codage de la chaîne passée en paramètre, avec une clé donnée.

>>> codageCesar("BONJOUR", 3) 'ERQMRXU'

Question 3 : écrire une fonction decodageCesar(chaineCodee, cle) qui retourne, pour un alphabet connu, le décodage de chaineCodee, avec une clé donnée.

>>> codageCesar("ERQMRXU", 3) 'BONJOUR'

alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" # Ne pas modifier def codageLettreCesar(caractere, cle): pass def codageCesar(chaine, cle): pass def decodageCesar(chaineCodee, cle): pass

Exercice 2 - Codage de Vigenère 96

Validé !

Le codage César pouvant se « casser » trop facilement, on peut lui préférer le codage de Vigenère.

Ce codage se base également sur le décalage de lettres, mais ce décalage n’est plus fixe.
Pour coder avec Vigenère, il est nécessaire d’utiliser un mot-clé (plus communément appelé mot de passe) qui servira à faire varier le décalage.

À chaque lettre de l'alphabet utilisé, on associe un décalage : la première lettre est associée à 0, la deuxième à 1 ... et la dernière à $n-1$, où $n$ est le nombre de lettres de l'alphabet. Par exemple, si l'alphabet est "ABCDEFGHIJKLMNOPQRSTUVWXYZ", alors la lettre A est associée à 0, la lettre B est associée à 1, et la lettre Z associée à 25.

Chaque lettre du mot à coder correspond à une certaine lettre du mot de passe. Le décalage appliqué à la lettre à coder est alors égal au décalage associé à la lettre correspondante du mot de passe.

Par exemple, pour coder le mot PYTHON avec le mot de passe NSI :

Lettre à coderPYTHON
Mot de passe (répété)NSINSI
Décalage associé1318813188
Lettre codéeCQBUGV

Ainsi, le mot PYTHON est codé en CQBUGV.

Dans les questions suivantes, on considère que l'alphabet utilisé est "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

Question 1: écrire une fonction decalageAssocie(lettre) qui retourne le décalage associé à une lettre donnée.

>>> decalageAssocie("N") 13

Question 2: écrire une fonction codageVigenere(chaine, motDePasse) qui retourne la chaîne codée par motDePasse avec le codage de Vigenère.

>>> codageVigenere("PYTHON", "NSI") CQBUGV

Le codage de Vigenère est dit symétrique, car le mot de passe utilisé pour le décodage est le même que celui utilisé pour le codage.

Pour décoder un message, on procède de la même façon, mais en appliquant un décalage inversé.

Question 3: écrire une fonction decodageVigenere(chaine, motDePasse) qui retourne la chaîne décodée par motDePasse avec le codage de Vigenère.

>>> decodageVigenere("VJIEOGRF", "ABC") VIGENERE

alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" # Ne pas modifier def decalageAssocie(lettre): pass def codageVigenere(chaine, motDePasse): pass def decodageVigenere(chaine, motDePasse): pass