@@ -65,7 +65,7 @@ def maj_progress_bar(self, sleep_avant: float, progress: Progress, task: TaskID,
6565 progress .update (task_id = task , description = message , advance = avance )
6666 time .sleep (sleep_apres )
6767
68- def analyser_fichier_specifique (self , chemin_fichier_chiffre : str , progress : Progress , task , error :bool , nbr_opr_mission : int ) -> ResultatAnalyse :
68+ def analyser_fichier_specifique (self , chemin_fichier_chiffre : str , progress : Progress , task , error :bool , nbr_opr_mission : int ) -> List [ ResultatAnalyse ] :
6969 """
7070 ANALYSE D'UN FICHIER SPÉCIFIQUE
7171 - Sélection du fichier à analyser
@@ -80,6 +80,7 @@ def analyser_fichier_specifique(self, chemin_fichier_chiffre: str, progress : Pr
8080 ResultatAnalyse: résultat de l'analyse
8181 """
8282 debut_analyse = time .time ()
83+ algorithme_potenciel = []
8384 try :
8485 # Vérification de l'existence du fichier
8586 avance = (100 / (self ._NBR_OPERATION_ANALYSE * nbr_opr_mission ))
@@ -92,15 +93,13 @@ def analyser_fichier_specifique(self, chemin_fichier_chiffre: str, progress : Pr
9293 self .maj_progress_bar (0.3 , progress , task , "Fichier non trouvé ❌ (Aborting...)" , ((avance * self ._NBR_OPERATION_ANALYSE ) - avance * 0.3 ), 1 )
9394
9495 error = True
95- return ResultatAnalyse ("" , b"" , 0.0 , b"" , 0.0 , 0 )
96+ return [ ResultatAnalyse ("" , b"" , 0.0 , b"" , 0.0 , 0 )]
9697
9798 # Initialisation des variables
9899 # TODO : Mise à jour de la progress bar -> step : Initialisation des utilitaires pour l'identification (Done)
99100 self .maj_progress_bar (0.5 , progress , task , "Initialisation des utilitaires pour l'identification" , avance * 0.2 , 1 )
100101
101- algorithme_detecte = ""
102102 cle = b""
103- score_probabilite = 0.0
104103 texte_dechiffre = b""
105104 nb_tentatives = 0
106105
@@ -125,32 +124,39 @@ def analyser_fichier_specifique(self, chemin_fichier_chiffre: str, progress : Pr
125124 cumul_progress_avance += 2 * avance_algo
126125
127126 if score >= 0.6 : # Seuil de confiance
127+
128+ algorithme_potenciel .append ({
129+ 'algo' : nom_algo ,
130+ 'score' : score
131+ })
132+
128133 # TODO : Mise à jour de la progress bar -> step : Détection réussie pour {algorithme} et préparation du rapport d'analyse (Done)
129- self .maj_progress_bar (1 , progress , task , f"Détection réussie pour { nom_algo } et préparation du rapport d'analyse " , (( 100 / nbr_opr_mission ) - cumul_progress_avance ) , 1 )
134+ self .maj_progress_bar (1 , progress , task , f"Elligibilité détectée pour { nom_algo } " , avance_algo , 1 )
130135
131- algorithme_detecte = nom_algo
132- score_probabilite = score
133- break
134136 else :
135137 # TODO : Intégrer la progress bar -> step : Echec d'identification pour {algorithme} (Done)
136138 self .maj_progress_bar (1 , progress , task , f"Echec d'identification pour { nom_algo } " , avance_algo , 1 )
137139
138140 cumul_progress_avance += avance_algo
139141
140- if not algorithme_detecte :
142+ if not algorithme_potenciel :
141143 print ("Aucun algorithme correctement détecté " )
142144 temps_execution = time .time () - debut_analyse
143- return ResultatAnalyse ("" , b"" , 0.0 , b"" , temps_execution , nb_tentatives , chemin_fichier_chiffre , 0 )
145+ return [ ResultatAnalyse ("" , b"" , 0.0 , b"" , temps_execution , nb_tentatives , chemin_fichier_chiffre , 0 )]
144146
145147 temps_execution = time .time () - debut_analyse
146148
147- return ResultatAnalyse (algorithme_detecte , cle , score_probabilite , texte_dechiffre , temps_execution , nb_tentatives , chemin_fichier_chiffre , 0 )
149+ resultat : List [ResultatAnalyse ]= []
150+ for item in algorithme_potenciel :
151+ resultat .append (ResultatAnalyse (item ['algo' ], cle , item ['score' ], texte_dechiffre , temps_execution , nb_tentatives , chemin_fichier_chiffre , 0 ))
148152
153+ return resultat
154+
149155 except Exception as e :
150156 print (f"Erreur lors de l'analyse: { str (e )} " )
151157 temps_execution = time .time () - debut_analyse
152158 error = True
153- return ResultatAnalyse ("" , b"" , 0.0 , b"" , temps_execution , 0 , chemin_fichier_chiffre )
159+ return [ ResultatAnalyse ("" , b"" , 0.0 , b"" , temps_execution , 0 , chemin_fichier_chiffre )]
154160
155161 def __tenter_dechiffrement_avec_dictionnaire (self , chemin_fichier : str , cles_candidates : list [bytes ], analyzer : CryptoAnalyzer , resultat : ResultatAnalyse ):
156162 """
@@ -222,42 +228,55 @@ def mission_complete_automatique(self, dossier_chiffres: str, chemin_dictionnair
222228
223229 # Analyse du fichier
224230 error = False
225- resultat = self .analyser_fichier_specifique (fichier , progress , task , error , self ._NBR_OPERATION_MISSION )
226-
227- # Tentative de déchiffrement si algorithme détecté
228- if resultat .algo :
229- # TODO: MAJ de la progress bar -> step: Amorçage de la phase de déchiffrement (Done)
230- self .maj_progress_bar (0 , progress , task , "Amorçage de la phase de déchiffrement..." , (100 / self ._NBR_OPERATION_MISSION ) * 0.5 , 1 )
231-
232- analyzer = self .analyzers [resultat .algo ]
233-
234- # TODO: MAJ de la progress bar -> step: Récupération des clés candidates (Done)
235- self .maj_progress_bar (0 , progress , task , "Récupération des clés candidates..." , (100 / self ._NBR_OPERATION_MISSION )* 0.5 , 1 )
231+ resultats_analyse = self .analyser_fichier_specifique (fichier , progress , task , error , self ._NBR_OPERATION_MISSION )
232+ cumul_avance : float = 0
236233
237- cles_candidates = analyzer .generer_cles_candidates (chemin_dictionnaire )
238-
239- if cles_candidates :
240- print (f"Test de { len (cles_candidates )} clés candidates..." )
241- # TODO: MAJ de la progress bar -> step: Test de déchiffrement (Done)
242- self .maj_progress_bar (0 , progress , task , "Test de déchiffrement" , (100 / self ._NBR_OPERATION_MISSION ), 3 )
243-
244- error = self .__tenter_dechiffrement_avec_dictionnaire (chemin_fichier , cles_candidates , analyzer , resultat )
234+ print ('analyzed' )
235+ # Tentative de déchiffrement si algorithme détecté
236+ for resultat in resultats_analyse :
237+ if resultat .algo :
238+ avancement = (100 / (self ._NBR_OPERATION_MISSION * len (resultats_analyse )))
239+ # TODO: MAJ de la progress bar -> step: Amorçage de la phase de déchiffrement (Done)
240+ self .maj_progress_bar (0 , progress , task , f"Amorçage de la phase de déchiffrement avec { resultat .algo } ..." , avancement * 0.5 , 1 )
241+
242+ analyzer = self .analyzers [resultat .algo ]
245243
246- else :
247- # TODO: MAJ de la progress bar -> step: Abort et récupération des résultats d'analyse (Done)
248- self .maj_progress_bar (0 , progress , task , "Aucune clé candidate générée ❌ (Aborting ...)" , (100 / self ._NBR_OPERATION_MISSION ), 3 )
249-
250- error = True
244+ # TODO: MAJ de la progress bar -> step: Récupération des clés candidates (Done)
245+ self .maj_progress_bar (0 , progress , task , f"Récupération des clés candidates pour { resultat .algo } ..." , avancement * 0.5 , 1 )
251246
247+ cles_candidates = analyzer .generer_cles_candidates (chemin_dictionnaire )
248+ cumul_avance += avancement
249+
250+ if cles_candidates :
251+ print (f"Test de { len (cles_candidates )} clés candidates..." )
252+
253+ # TODO: MAJ de la progress bar -> step: Test de déchiffrement (Done)
254+ self .maj_progress_bar (0 , progress , task , f"Test de déchiffrement pour { resultat .algo } ..." , avancement * 0.5 , 3 )
255+
256+ error = self .__tenter_dechiffrement_avec_dictionnaire (chemin_fichier , cles_candidates , analyzer , resultat )
257+
258+ #Cas de déchiffrement réussi
259+ if not error :
260+ # TODO: MAJ de la progress bar -> step: Déchiffrement réussi pour {algorithme}
261+ self .maj_progress_bar (0.5 , progress , task , f"Déchiffrement réussi pour { resultat .algo } " , (100 / self ._NBR_OPERATION_MISSION ) - cumul_avance , 2 )
262+
263+ resultat_final : ResultatAnalyse = resultat
264+ break
265+ else :
266+ self .maj_progress_bar (0.5 , progress , task , f"Echec de déchiffrement pour { resultat .algo } ❌" , avancement * 0.5 , 2 )
267+ else :
268+ # TODO: MAJ de la progress bar -> step: Abort et récupération des résultats d'analyse (Done)
269+ self .maj_progress_bar (0 , progress , task , "Aucune clé candidate générée ❌ (Aborting ...)" , avancement , 3 )
270+ error = True
252271
253- resultats .append (resultat )
272+ resultats .append (resultat_final )
254273
255274 # retour visuel
256- if resultat .algo :
275+ if resultat_final .algo :
257276 # TODO: MAJ de la progress bar -> step: Finalsation et retour de résultats (Done)
258- self .maj_progress_bar (0 , progress , task , "Finalisation et retour des résultats" , ( 100 / self . _NBR_OPERATION_MISSION ) , 3 )
277+ self .maj_progress_bar (0 , progress , task , "Finalisation et retour des résultats" , 100 , 3 )
259278
260- print (f"{ fichier } : { resultat .algo } (score: { resultat .score_probabilite :.2f} )" )
279+ print (f"{ fichier } : { resultat_final .algo } (score: { resultat_final .score_probabilite :.2f} )" )
261280
262281 message = "[bold green] Mission terminée. ✅[/bold green]\n \n " if not error else "[bold red] Mission terminée: Déchiffrement non concluant. ❌ [/bold red]\n \n "
263282 Console ().print (message )
0 commit comments