- Python 100%
| messages | ||
| .gitignore | ||
| cesar.py | ||
| force_brute.py | ||
| freq.py | ||
| README.md | ||
| requirements.txt | ||
| vigenere.py | ||
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 :
L’analyse 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 :
- Estimation de la longueur de la clé avec l’indice de coïncidence.
- Découpage du texte en groupes.
- Analyse fréquentielle de chaque groupe comme un chiffrement César indépendant.
- Reconstitution de la clé.
- 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 l’analyse fréquentielle dépend de la longueur du texte.
Plus le texte est court, moins les fréquences observées sont fiables.