#!/usr/bin/python3 # -*- coding: utf-8 -*- import multiprocessing import sys import time tabChar = list("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ") class ProcessBrurteForce(multiprocessing.Process): def __init__(self,queue, idx, nbInstence,password, clef, limite, verbose): super().__init__() self.queue = queue self.idx = idx self.nbInstence = nbInstence #la queue contien 3 valeur :int useCase = 0, boolean found, list passTrouve #la queue contien 5 valeur :int useCase = 1, nbMots, time secondes , list motEnCours nom du thread #useCase = 0, on remonte les information contenant le mot Trouvé ou non #useCase = 1, on remonte des information sur les performances #gestion du temps self.nbMot = 0 self.procTime = time.time() self.verbose = verbose self.password = password self.clef = clef self.limite = limite self.tabPass = list("a") self.isFound = False return def testSpeed(self): self.nbMot = self.nbMot+1 if (time.time() - self.procTime) > 5 : self.queue.put([1,self.nbMot,time.time() - self.procTime, "".join(self.tabPass),multiprocessing.current_process().name]) self.nbMot = 0 self.procTime = time.time() def run(self): #print(multiprocessing.current_process().name + "\tStart") found , passTrouve = self.checkChar(0) if not found: while not found and len(self.tabPass) < self.limite: indexMin = round((len(tabChar)/self.nbInstence)*self.idx) indexMax = round(indexMin + (len(tabChar)/self.nbInstence)) self.tabPass = self.tabPass + list(tabChar[indexMin]) if( self.idx == self.nbInstence - 1 ): indexMax = len(tabChar) for i in range(indexMin,indexMax): self.tabPass[len(self.tabPass)-1] = tabChar[i] found,passTrouve =self.recursiveFunction(len(self.tabPass)-2) if found == True: #la queue contien 2 valeur : boolean found, list passTrouve #la queue contien 4 valeur : nbMots, time secondes , list motEnCours nom du thread self.queue.put([0,found, passTrouve]) return None print(multiprocessing.current_process().name + "\tStop") #la queue contien 2 valeur : boolean found, list passTrouve #la queue contien 4 valeur : nbMots, time secondes , list motEnCours nom du thread self.queue.put([0,found, passTrouve]) return None def recursiveFunction(self,index): found , passTrouve = self.checkChar(index) if index > 0 and not found: for char in tabChar : self.tabPass[index] = char found, passTrouve =self.recursiveFunction(index-1) if found == True : passTrouve = "".join(self.tabPass) return found, passTrouve return found, passTrouve #Cette fonction permet de replacer le dernier caractère de la Chaine def checkChar(self,index): found = False passTrouve = "" for char in tabChar: if self.verbose: self.testSpeed() self.tabPass[index] = char if "".join(self.tabPass) == self.password: found=True passTrouve = "".join(self.tabPass) return found, passTrouve #print("".join(self.tabPass)) return found, passTrouve #si le fichier est lancé seul if __name__ == '__main__' : sys.exit()