Skip to content

Commit 8c0bd17

Browse files
Implémentation de la fonction de recherche d'un rapport de mission (#15)
* Implementation de la fonction de validation du texte déchiffrer * Définition de la classe de gestion des rapports de ission et implémentatioon de la fonction de génération des rapport de synthèse * Implémentation de la fonction de recherche d'anciens rapports --------- Co-authored-by: Let Me Cook <badaroumouwafic@gmail.com>
1 parent 9c3bafe commit 8c0bd17

2 files changed

Lines changed: 90 additions & 21 deletions

File tree

src/rapport_mission.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
from datetime import date, datetime
2+
import os
3+
4+
class generer_rapport_mission():
5+
6+
def __init__(self):
7+
pass
8+
9+
def generer_rapport_synthese(self, resultats_de_mission:dict)->None:
10+
"""
11+
Retourne le rapport de mission effectué.
12+
Args:
13+
resultats_de_mission(dict): les résultats de l'opération de déchiffrement du fichier
14+
Returns:
15+
str: le rapport
16+
"""
17+
18+
equivalence=['AES-CBC-256', 'CHACHA20', 'BLOWFISH', 'AES-GCM', 'FERNET']
19+
20+
try :
21+
rapport= f"RAPPORT DE SYNTHESE DU {date.today().strftime("%d/%m/%y")} à {str(datetime.now().time()).split('.')[0]}\n "
22+
+ f"Mission {equivalence.index(resultats_de_mission['algorithme'].toupper()) + 1}: {resultats_de_mission['algorithme'].toupper()} \n"
23+
+ "I - Statistiques relatives à l'analyse du fichier\n"
24+
+ f"Fichier crypté par cet algorithme: {resultats_de_mission['fichier']}\n"
25+
+ f"Clé de déchiffrement identifiée: {resultats_de_mission['cle']} \n"
26+
+ f"Nombre de tentatives: {resultats_de_mission['tentatives']} \n"
27+
+ f"Temps d'exécution: {resultats_de_mission["temps_execution"]} \n"
28+
+ "II - Résultats obtenus"
29+
+ f"Taux réussite du déchiffrement: {resultats_de_mission['taux_succes']}({resultats_de_mission['statut_succes']})\n"
30+
+ f"Texte déchiffré: {resultats_de_mission['texte_dechiffre']} \n"
31+
32+
# Ecriture du rapport dans le fichier rapport.txt pour les affichage ultérieurs
33+
with open(f"{os.path.abspath(os.curdir)}\\CryptoForensic-Python\\rapport_mission.txt", 'a') as f:
34+
f.write(rapport.replace('\n', '~'))
35+
f.close()
36+
37+
return rapport
38+
except (KeyError, ValueError):
39+
print("Une erreur s'est produite.")
40+
41+
return rapport
42+
43+
44+
def recuperer_ancien_rapport(self, base_date:str)->list|str:
45+
"""
46+
Récupère un/les ancien(s) rapport(s) dans le fichier rapport.txt
47+
48+
Args:
49+
base_date(str): la date à laquelle le/les rapport(s) a/ont été émis
50+
Returns:
51+
list|str: les rapports s'ils existent.
52+
53+
54+
"""
55+
rapport=[]
56+
try:
57+
with open(f"{os.path.abspath(os.curdir)}\\rapport.txt", 'r') as f:
58+
line=f.readline()
59+
while line != "" :
60+
if line.find(base_date) != -1:
61+
rapport.append(line)
62+
f.close()
63+
return rapport if rapport.count() > 0 else 'Aucun rapport trouvé à cette date.'
64+
except FileNotFoundError:
65+
print('Fichier non trouvé')
66+

src/utils.py

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def verifier_texte_dechiffre(texte: str) -> dict[int, int, int, list, int]:
7777
if lettre.isprintable():
7878
stats['imprimable']+= 100/len(texte)
7979

80-
# Traitement du texte brut pour obtenir une séquence distinct de pseudo-mot à cette étape séparé par des espaces
80+
# Traitement du texte brut pour obtenir une séquence distincte de pseudo-mot à cette étape séparé par des espaces
8181

8282
tab='./:!\\}{_%*$£&#;,~"()[]=§|`^@'
8383
copy=texte
@@ -86,7 +86,7 @@ def verifier_texte_dechiffre(texte: str) -> dict[int, int, int, list, int]:
8686
copy=copy.strip().split(' ')
8787
stats['nombre_mots']=len(copy)
8888

89-
# Verifier que le texte est un mot anglais/francais
89+
# Verifier que le chaque mot du texte est un mot anglais/francais
9090

9191
try:
9292
for mot in copy:
@@ -145,29 +145,32 @@ def verifier_texte_dechiffre(texte: str) -> dict[int, int, int, list, int]:
145145
def rangerDico():
146146
"""
147147
Fonction utilitaire de rangement du dictionnaire anglais téléchargé
148+
Pour effectuer des tests
148149
"""
149150
i=0
150151
compte = 0
151152
# Ouverture du grand dictionnaire.
152-
with open(f"{os.path.abspath(os.curdir)}\\words_alpha.txt",'r') as f:
153-
while i<26:
154-
# Définition du chemin vers le fichier de chaque mot en fonction de l'alphabet.
155-
chemin=f"{os.curdir}\\CryptoForensic-Python\\dicoEn\\{string.ascii_lowercase[i]}.txt"
156-
with open(chemin, 'a') as fichier:
157-
#Ecriture dans le fichier.
158-
fichier.write(string.ascii_lowercase[i]+'\n')
159-
while 1 :
160-
ligne=f.readline()
161-
if ligne.startswith(string.ascii_lowercase[i]) or ligne.startswith('y'):
162-
fichier.write(ligne)
163-
compte += 1
164-
else :
165-
break
166-
# Fermeture du fichier apres écriture du dernier mot.
167-
fichier.close()
168-
i+=1
169-
print(compte)
170-
153+
try :
154+
with open(f"{os.path.abspath(os.curdir)}\\words_alpha.txt",'r') as f:
155+
while i<26:
156+
# Définition du chemin vers le fichier de chaque mot en fonction de l'alphabet.
157+
chemin=f"{os.curdir}\\dicoEn\\{string.ascii_lowercase[i]}.txt"
158+
with open(chemin, 'a') as fichier:
159+
#Ecriture dans le fichier.
160+
fichier.write(string.ascii_lowercase[i]+'\n')
161+
while 1 :
162+
ligne=f.readline()
163+
if ligne.startswith(string.ascii_lowercase[i]) or ligne.startswith('y'):
164+
fichier.write(ligne)
165+
compte += 1
166+
else :
167+
break
168+
# Fermeture du fichier apres écriture du dernier mot.
169+
fichier.close()
170+
i+=1
171+
print(compte)
172+
except FileNotFoundError:
173+
print('Fichier non trouvé.')
171174
# rangerDico()
172175

173176
print(verifier_texte_dechiffre('neither#nor avec, ded_caractère a'))

0 commit comments

Comments
 (0)