Première spécialité NSI Année 2020 - 2021
Applications du dictionnaire à la cryptographie
Introduction et Historique. Chiffrement de César ou chiffrement par décalage
Les historiens attribuent à Jules César l’utilisation du chiffrement par dé-
calage pour certaines de ses correspondances, notamment militaires. Le
chiffrement de César consiste à décaler chaque lettre dans l’alphabet d’un
même nombre de rangs.
Par exemple si on choisit un décalage de 4, le « a » devient « e » , le « b » devient
« f » , le « c » devient « g » , etc... On peut utiliser deux cadrans comme ci-contre
pour coder ou décoder du texte.
1. A quel décalage correspond l’image ci-contre ?
2. Combien de décalages distincts existe-t-il pour le chiffrement de César ?
3. Essayez de décoder le mot « yhcqxw » qui a été codé par cette méthode.
Chiffrement monoalphabétique
La méthode de chiffrement par substitution monoalphabétique est un protocole de cryptographie qui consiste à
remplacer chaque lettre de l’alphabet par une autre lettre, on s’autorise ici toute permutation de l’alphabet.
Voilà une clé de cryptage sous la forme d’un dictionnaire Python. Le « a » se code en « k » , le « b » en « g » , etc ...
Cle_ test = ’a’ : ’k’, ’b’ : ’g’, ’c’ : ’c’, ’d’ : ’f’, ’e’ : ’q’, ’f’ : ’b’, ’g’ : ’o’, ’h’ : ’e’, ’i’ : ’i’, ’j’ : ’w’, ’k’ : ’x’, ’I’ : ’h’, ’m’ : ’u’, ’n’ : ’a’, ’o’ :
’y’, ’p’ : ’p’, ’q’ : ’v’, ’r’ : ’n’, ’s’ : ’d’, ’t’ : ’t’, ’u’ : ’l’, ’v’ : ’r’, ’w’ : ’m’, ’x’ : ’s’, ’y’ : ’z’, ’z’ :’j’
4. Combien de clés distinctes existe-t-il pour le chiffrement par substitution monoalphabétique ?
5. Écrire en Python une fonction coder(mot,cle) qui prend en argument un mot (ici une chaîne de caractères
sans espace ni accent) et une clé (un dictionnaire de la forme ci-dessus) et qui renvoie le mot crypté (chaîne de
caractères).
6. Écrire en Python une fonction cle_␣decodage(cle) qui prend en argument une clé (un dictionnaire de la forme
ci-dessus) et qui renvoie la clé de décryptage (un dictionnaire de la même forme mais qui permet de décrypter).
7. Décoder le message suivant : ’khiupyddighqalhaqdttqal’.
8. Coder et décoder un mot avec cette clé ou une autre pour vérifier que ce processus de cryptage fonctionne
correctement.
Pour aller plus loin
9. Écrire en Python une fonction creerDicoCodage() qui ne prend aucun argument et qui crée une clé de cryp-
tage (un dictionnaire de la forme donnée plus haut) au « hasard ». On pourra utiliser la fonction sample de
la bibliothèque random, qui permet de mélanger au « hasard » une liste. (On pourra créer une liste alphabet
contenant les lettres de l’alphabet dans l’ordre).
10. Quelle condition doit-on avoir sur une clé de cryptage pour qu’elle soit valide ?
11. Écrire une fonction qui permet de calculer le nombre d’apparitions de chaque caractère dans une chaîne de
caractères (ici plutôt sans espace, ponctuation ou accent) et qui retourne un dictionnaire qui contient les lettres
comme clés et le nombre d’apparitions de celles-ci comme valeurs associées.
Selon les sources, le type de texte, la fréquence des lettres en français varie, on pourra utiliser le tableau suivant
pour les lettres les plus fréquentes : (source Wikipédia)
Lettres e a i s n r t
Fréquences 12,1 7,1 6,6 6,5 6,4 6 5,9
12. En déduire quelle lettre remplace la lettre « e » dans le message codé suivant : « vlq w kiuq k bkinq kppnqafnq
cq ayugnq ltihq kls dkoqd iuuyntqh knceiuqfq kntidtq iaoqaiqln », on pourra essayer de commencer à décoder
ce message, un nombre « bien connu » y est caché.
7 juillet 2020 Lycée René Cassin Page 1/1