No description
Find a file
2026-04-27 23:54:47 +02:00
messages TD1 cryptographie classique 2026-04-27 23:48:28 +02:00
.gitignore TD1 cryptographie classique 2026-04-27 23:48:28 +02:00
cesar.py Depot propre du TD1 2026-04-27 23:54:47 +02:00
force_brute.py Depot propre du TD1 2026-04-27 23:54:47 +02:00
freq.py Depot propre du TD1 2026-04-27 23:54:47 +02:00
README.md TD1 cryptographie classique 2026-04-27 23:48:28 +02:00
requirements.txt TD1 cryptographie classique 2026-04-27 23:48:28 +02:00
vigenere.py Depot propre du TD1 2026-04-27 23:54:47 +02:00

TD1 - Cryptographie classique

Auteur : Mathieu Cortes
Adresse mail : mathieu.cortes@isen.yncrea.fr

Exercices Python

Partie 1 - Chiffrement de César

Fichier : cesar.py

Fonctions réalisées :

  • chiffrer(texte, cle)
  • dechiffrer(texte, cle)

Les tests demandés passent correctement :

assert chiffrer("Hello World!", 3) == "Khoor Zruog!"
assert dechiffrer("Khoor Zruog!", 3) == "Hello World!"
assert chiffrer(dechiffrer("Test", 13), 13) == "Test"

Partie 2 - Force brute

Fichier : force_brute.py

La fonction attaque_force_brute() teste toutes les clés de 0 à 25 et retourne les déchiffrements possibles.

Résultats trouvés :

  • Message français : clé = 7
    Message clair = De memoire, Jules Cesar fut assasine le 15 mars par Brutus au senat de Rome

  • Message anglais : clé = 19
    Message clair = Cryptography is the science of keeping secrets safe from prying eyes

Partie 3 - Analyse fréquentielle

Fichier : freq.py

La fonction calculer_frequences() calcule la fréquence de chaque lettre du texte.

La fonction deviner_cle() estime la clé en comparant la lettre la plus fréquente du texte chiffré avec la lettre la plus fréquente de la langue.

Résultats :

  • Message français : clé devinée = 7, correcte = oui
  • Message anglais : clé devinée = 19, correcte = oui

Observations :

Lanalyse fréquentielle fonctionne bien lorsque le texte est assez long et représentatif de la langue.
Elle peut se tromper sur un texte trop court ou avec un vocabulaire atypique.

Partie 4 - Vigenère

Fichier : vigenere.py

Fonctions réalisées :

  • chiffrer_vigenere(texte, cle)
  • dechiffrer_vigenere(texte, cle)
  • casser_vigenere(texte_chiffre, langue)

Méthode utilisée :

  1. Estimation de la longueur de la clé avec lindice de coïncidence.
  2. Découpage du texte en groupes.
  3. Analyse fréquentielle de chaque groupe comme un chiffrement César indépendant.
  4. Reconstitution de la clé.
  5. Déchiffrement du message.

Commandes Git utilisées

Configuration de Git :

git config --global user.name "Mathieu Cortes"
git config --global user.email "mathieu.cortes@isen.yncrea.fr"

Initialisation du dépôt :

git init
git add .
git commit -m "TD1 cryptographie classique"
git branch -M main
git remote add origin http://<adresse-forgejo>/<votre-username>/td1.git
git push -u origin main

Difficultés rencontrées

La principale difficulté est que lanalyse fréquentielle dépend de la longueur du texte.
Plus le texte est court, moins les fréquences observées sont fiables.