Я не могу реализовать потоки в своем коде грубой силы, чтобы поддержать, кто-то, кто мне помогает? на данный момент я только что добавил start_new_thread
, моя главная проблема в том, что я не могу распараллелить все, используя блокировки и разблокировки.
Я бы хотел, чтобы потоки пытались использовать разные ключи вместе, без использования одного и того же те, чтобы ускорить программу. Я думаю, что 3 или 4 темы подойдут.
import itertools # Libreria che permette di formulare tutte le possibili combinazioni di una lista di valori
import pandas as pd # Libreria standard pythoon che permette di sfuttare i dataframe
import time as ti # tempo di esecuzione
import threading
import _thread
from _thread import start_new_thread
def encrypt(plaintext, key, alphabet=' ABCDEFGHILMNOPQRSTUVZ'): #Funzione per cifrare un testo preso in imput una stringa plaintext stringa da cifrare
plaintext=plaintext.upper() #Tutto maiuscolo
crypted = '' # Stringa cifrata al momento vuota
key_length=len(key) # Chiave per la cifratura #quanto è lunga la chiave
for i in range(len(plaintext)): # ciclo for che permette di lavorare su ogni singolo carattere del testo da cifrare
if type(key) is str:
value = (alphabet.find(plaintext[i]) + alphabet.find(key[i % key_length])) % 22 # Associa alla lettera il numero corrispondente + il numero associato alla chiave e poi divide per 22
else:
value = (alphabet.find(plaintext[i]) + key[i % key_length]) % 22
crypted += alphabet[value]
return crypted
def decrypt(ciphertext, key, alphabet= ' ABCDEFGHILMNOPQRSTUVZ'): # Funzione per decifrare il testo
plaintext = ''
key_length=len(key)
for i in range(len(ciphertext)):
if type(key) is str:
value = (alphabet.find(ciphertext[i]) - alphabet.find(key[i % key_length])) % 22
else:
value = (alphabet.find(ciphertext[i]) - key[i % key_length]) % 22
plaintext += alphabet[value]
return plaintext
def brute_force(ciphertext, key_length, alphabet= ' ABCDEFGHILMNOPQRSTUVZ'): #Funzione che permette attraverso continuie sostituzioni di trovare tutte le possibili combinazioni
alpha_list=list(alphabet) #Prende una stringa e lu muta in una lista di caratteri
start = ti.time() #Start cronometro
for i in itertools.product(alpha_list,repeat=key_length): #uso itertool prendi tutti gli elementi della lista e dammi tutte le combinazioni di 5 elementi (combinazioni ammisibili)
iterator+=1
print('\rProvo tutte le chiavi composte da '+str(key_length)+' catteri: '+str(iterator)+'/'+str(len(alphabet)**key_length)+' ',end='') # Stato avanzamento della funzione
key=''.join(i) #Trasforma una lista di caratteri in una stringa
msg=decrypt(ciphertext,key) #Decifra il messaggio con la chiave casuale di n caratteri che hai generato
results.append([key,msg]) #Restituisce la coppia chiave e messaggio decifrato ed inserisce questa coppia di valori in un vettore
end=ti.time() - start
minuti=''
if (end // 60)>0:
minuti=minuti.join(str(end//60)+' min. e ')
print('\nElapsed time: '+minuti+'{:.2f}'.format(end % 60)+' sec.')
end = pd.DataFrame(results) # Restituisce una struttura dati in grado di filtrare i risultati in maniera ottimale
def pwd_breaker(d,consonanti='BCDFGHLMNPQRSTVZ', vocali='AEIOU'):
print('\n**********************************')
print('| PASSWORD BREAKER |')
print('**********************************')
print('\nCombinazioni totali: '+str(len(d)))
start = ti.time()
print('Rimuovo combinazioni con 3 spazi consecutivi')
df1=d[d[1].str.count(' ')==0] #Dataframe con in quale si seleziona tutte le righe che non hanno 3 spazi consecutivi
print('Combinazioni totali: '+str(len(df1)))
print('elapsed time (s): '+str(ti.time() - start))
start = ti.time()
print('Rimuovo combinazioni con 2 spazi consecutivi')
df1=df1[df1[1].str.count(' ')==0]
print('Combinazioni totali: '+str(len(df1)))
print('elapsed time (s): '+str(ti.time() - start))
start = ti.time()
print('Rimuovo combinazioni con Q seguita da consonante o spazio')
for i in itertools.product('Q', list(consonanti+' ')):
df1=df1[df1[1].str.count(''.join(i))==0]
print('Combinazioni totali: '+str(len(df1)))
print('elapsed time (s): '+str(ti.time() - start))
start = ti.time()
print('Rimuovo combinazioni con Q seguita da vocali (esclusa la U)')
for i in itertools.product('Q', list('AEIO')):
df1=df1[df1[1].str.count(''.join(i))==0]
print('Combinazioni totali: '+str(len(df1)))
print('elapsed time (s): '+str(ti.time() - start))
start = ti.time()
print('Rimuovo combinazioni con Z seguita da consonante o spazio')
for i in itertools.product('Z', list(consonanti+' ')):
df1=df1[df1[1].str.count(''.join(i))==0]
print('Combinazioni totali: '+str(len(df1)))
print('elapsed time (s): '+str(ti.time() - start))
start = ti.time()
print('Rimuovo combinazioni con H seguita da consonante o spazio')
for i in itertools.product('H', list(consonanti+' ')):
df1=df1[df1[1].str.count(''.join(i))==0]
print('Combinazioni totali: '+str(len(df1)))
print('elapsed time (s): '+str(ti.time() - start))
start = ti.time()
print('Rimuovo combinazioni con una consonante preceduta e seguita da spazio')
for i in itertools.product(' ', list(consonanti),' '):
df1=df1[df1[1].str.count(''.join(i))==0]
print('Combinazioni totali: '+str(len(df1)))
print('elapsed time (s): '+str(ti.time() - start))
start = ti.time()
print('Rimuovo combinazioni con 4 consonanti consecutive: ', end='')
iterator=0
for i in itertools.product(list(consonanti), repeat=4):
df1=df1[df1[1].str.count(''.join(i))==0]
iterator+=1
print('\rRimuovo combinazioni con 4 consonanti consecutive ('+str(len(df1))+'): '+str(iterator)+'/'+str(len(consonanti)**4)+' ',end='')
print('\nCombinazioni finali: '+str(len(df1)))
end=ti.time() - start
minuti=''
if (end // 60)>0:
minuti=minuti.join(str(end//60)+' min. e ')
print('\nElapsed time: '+minuti+'{:.2f}'.format(end % 60)+' sec.')
df1.to_csv('lista.csv', index=False)
print(df1)
return df1
# =============================================================================
# TEST FUNZIONANTE
# =============================================================================
results=[] #risultto finale attacco
end=0
iterator = 0
testo='ECCO COSA SUCCEDE QUANDO CIFRI UN TESTO E TI DIMENTICHI LA CHIAVE DI CIFRATURA'
chiave='BARRA'
testo_cifrato=encrypt(testo, chiave)
ritorno=decrypt(testo_cifrato, chiave)
print(testo)
print(testo_cifrato)
print(ritorno)
inizio= ti.time()
'''
thread1 = threading.Thread(target=brute_force(testo_cifrato,5))
thread2 = threading.Thread(target=brute_force(testo_cifrato,5))
thread2.start()
thread1.start()
thread1.join()
thread2.join()
'''
start_new_thread(brute_force,(testo_cifrato,5,))
start_new_thread(brute_force,(testo_cifrato,5,))
start_new_thread(brute_force,(testo_cifrato,5,))
df2=pwd_breaker(end)
end=ti.time() - inizio
minuti=''
if (end // 60)>0:
minuti=minuti.join(str(end//60)+' min. e ')
print('\nTEMPO TOTALE DI ESECUZIONE: '+minuti+'{:.2f}'.format(end % 60)+' sec.')