44from rich import print
55import os , struct
66import math
7-
8- # Import de la classe CryptoAnalyzer et utils
97import sys
10- import os
118sys .path .append (os .path .join (os .path .dirname (__file__ ), '..' ))
129from crypto_analyzer import CryptoAnalyzer
1310from utils import calculer_entropie
@@ -108,14 +105,17 @@ def identifier_algo(self, chemin_fichier_chiffre: str) -> float:
108105 print (f"Erreur lors de l'identification de l'algorithme: { e } " )
109106 return 0.0
110107
108+
111109 def filtrer_dictionnaire_par_indices (self , chemin_fichier_chiffre ):
112110 pass
113111
114112 def generer_cles_candidates (self , chemin_fichier_chiffre ):
113+
115114 '''
116115 Cette fonction se charge de générer les clés candidates pour le déchiffremment du fichier chiffré en utilisant
117116 la dérivation sha256 pour renforcer les clées de chiffrement.
118117
118+
119119 Args:
120120 chemin_fichier_chiffre(str) : Le chemin vers le fichier chiffré
121121
@@ -157,6 +157,29 @@ def dechiffrer(self, chemin_fichier_chiffre: str, cle_donnee: bytes) -> bytes:
157157 except Exception as e :
158158 print (f"Une erreur est survenue : { e } " )
159159 return b""
160+ cle_candidates .append (hashlib .sha256 (cle ).encode (encoding = "utf-8" ))
161+
162+ return cle_candidates
163+
164+ def dechiffrer (self ,chemin_fichier_chiffer : str ,clef :bytes )-> str :
165+ if len (clef ) != 32 : return ValueError ("Erreur : La clé a pas la taille correcte " )
166+ else :
167+ try :
168+ with open (f"data/{ chemin_fichier_chiffer } " ,'rb' ) as f :
169+ nonce = f .read (16 )
170+ texte_chiffrer = f .read ()
171+
172+ counter = 0
173+ algorithm_chacha20 = algorithms .ChaCha20 (clef ,nonce )
174+ cipher = Cipher (algorithm_chacha20 ,mode = None )
175+ decrypteur = cipher .decryptor ()
176+ return decrypteur .update (texte_chiffrer )
177+
178+
179+
180+ except Exception as e :
181+ print (f"Une erreur est survenu : { e } " )
182+
160183
161184
162185# print(ChaCha20_Analyzer().dechiffrer("mission2.enc",os.urandom(32)))
0 commit comments