Exercices corrigés Python (Série 5)

11 Feb 2017 11 Feb 2017 73377 vues ESSADDOUKI Mostafa 14 min de lecture

Exercices — Cryptographie et chiffrement

Vue d'ensemble — Les grandes familles de chiffrement
ExerciceMéthodeCléSécurité
1Run-Length Encoding (RLE)Compression (pas chiffrement)
2Substitution par fréquenceoccurrences dans le motFaible
3Décalage fixe (ROT+1)d = 1Très faible
4Chiffre de Césardécalage dFaible (26 clés)
5Substitution alphabétiquealphabet désordonnéMoyen (26! clés)
6Chiffre de Vigenèremot-clé variableBon (poly-alphabétique)

Exercice 1 — Compression RLE (Run-Length Encoding)

 Exercice

Encoder une chaîne par comptage des répétitions successives

 Niveau : Débutant
Définition — RLE (Run-Length Encoding) Le RLE est une technique de compression sans perte : on remplace chaque séquence de caractères identiques consécutifs par le nombre d'occurrences suivi du caractère.

Principe : parcourir la chaîne de gauche à droite, compter les répétitions successives, puis écrire le couple nbr + caractère dans le résultat.

Écrire une fonction crypter(CH) qui encode la chaîne CH (≤ 50 caractères alphabétiques) selon le principe RLE.

Exemple
Entrée
CH = 'aaaFyBssssssssssssazz'
Sortie
Res = '3a1F1y1B12s1a2z'
Décomposition : aaa→3a | F→1F | y→1y | B→1B | ssssssssssss→12s | a→1a | zz→2z

Exercice 2 — Chiffrement par fréquence d'occurrence

 Exercice

Chiffrer un mot selon le nombre d'occurrences de chaque lettre

 Niveau : Intermédiaire
Règle de chiffrementPour chaque lettre du mot M :
  1. Compter son nombre d'occurrences n dans M.
  2. Calculer le décalage K :
    • n impair → K = 2 × n
    • n pair → K = n ÷ 2
  3. Remplacer la lettre par celle qui se trouve K positions après dans l'alphabet (modulo 26 pour le retour au début).

  Exemple — HAPPY

Lettren (occurrences)n pair/impairKPosition orig.Nouvelle pos.Résultat
H1impair2×1 = 279J
A1impair2×1 = 202C
P2pair2÷2 = 11516Q
P2pair2÷2 = 11516Q
Y1impair2×1 = 22426 % 26 = 0A

Résultat : JCQQA

Exemple
Entrée
M = 'HAPPY'
Sortie
MC = 'JCQQA'

Exercice 3 — Décalage de 1 (ROT+1)

 Exercice

Chiffrer un message en décalant chaque lettre d'une position

 Niveau : Débutant

Remplacer chaque lettre majuscule par la suivante dans l'alphabet, avec retour circulaire : Z → A.

Exemple
Entrée
CH = 'ABCCZABEY'
Sortie
Res = 'BCDDABCFZ'
Détail : Z (pos 25) → pos 26 % 26 = 0 → A … Y (pos 24) → pos 25 → Z ✓

Exercice 4 — Chiffre de César

 Exercice

Chiffrer un message avec un décalage variable d

 Niveau : Débutant
Définition — Chiffre de César Chaque lettre du message est remplacée par la lettre qui se trouve d positions après dans l'alphabet (retour circulaire). Jules César utilisait d = 3.

Formule : lettre_chiffrée = chr(ord('A') + (pos + d) % 26)
Exemple
Entrée
s = "ABCDEFGH", d = 3
Sortie
DEFGHIJK

Exercice 5 — Substitution par alphabet-clé

 Exercice

Chiffrer par substitution avec un alphabet désordonné

 Niveau : Débutant
Définition — Chiffrement par substitution On dispose d'un alphabet-clé : une permutation des 26 lettres. Chaque lettre A–Z est remplacée par la lettre à la même position dans l'alphabet-clé.

Exemple avec la clé 'HYLUJPVREAKBNDOFSQZCWMGITX' :
A → H, B → Y, C → L, D → U, E → J, F → P …

Il y a 26! ≈ 4 × 10²⁶ clés possibles, rendant la force brute impossible.

Exemple
Entrée
CH = 'ABCDEFZ', clé = 'HYLUJPVREAKBNDOFSQZCWMGITX'
Sortie
Res = 'HYLUJPX'

Exercice 6 — Chiffre de Vigenère

 Exercice

Chiffrement poly-alphabétique avec un mot-clé

 Niveau : Intermédiaire
Définition — Chiffre de Vigenère (XVIe siècle) Combinaison de plusieurs chiffres de César : chaque lettre du message est décalée d'une quantité définie par la lettre correspondante de la clé (répétée cycliquement).

Formule : chiffré[i] = (message[i] + clé[i % len(clé)]) % 26

Avantage principal : la même lettre du message peut produire des lettres chiffrées différentes (poly-alphabétique) → résistant à l'analyse de fréquences.

  Début du chiffrement — clé "VIGENERE", message "ILFAUT..."

PositionLettre msgLettre cléDécalage cléRésultat
0I (8)V (21)+21(8+21)%26 = 3 → D
1L (11)I (8)+8(11+8)%26 = 19 → T
2F (5)G (6)+6(5+6)%26 = 11 → L
Exemple
Entrée
message = "ILFAUTCODER"
clé     = "VIGENERE"
Sortie
DTLNLBVBWIV

Récapitulatif — Techniques de chiffrement

MéthodePrincipe PythonClés possiblesBug corrigé
RLEBoucle + compteur / itertools.groupby
Fréquences.count(c) + modulo 26Variable
ROT+1(pos + 1) % 261
César(pos + d) % 2625
Substitutionstr.maketrans / cle[alpha.find(c)]26! ≈ 4×10²⁶
VigenèreCésar avec décalage cyclique selon la clé26^len(clé)Espace → alpha.find retourne -1
Points clés à retenir
  • Le modulo 26 (% 26) remplace avantageusement les tests if indice > 25 pour tout chiffrement circulaire.
  • chr/ord évite de stocker la chaîne 'ABCDE…Z' et rend le code plus lisible.
  • Toujours vérifier la gestion des caractères non alphabétiques (espaces, ponctuation) avant d'indexer dans un alphabet.
  • str.maketrans + str.translate est la méthode Pythonique pour les substitutions lettre-à-lettre.
  • Le déchiffrement de Vigenère est simplement le chiffrement avec le décalage opposé : (pos - d) % 26.
Sortie
// La sortie apparaîtra ici…
Prêt · Ctrl+Entrée pour exécuter

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.