Top.Mail.Ru
Ответы

Падбор паролей на python

У меня уже есль код :
for a in range(99999999):
pas = '%08d' % a
print(pas,end='\r')
else:
print('парроль не найден')

Но мне надо его как-то ускорить он находит 99999999 за 32 минуты

По дате
По рейтингу
Аватар пользователя
Новичок
6мес

без сторонних импортов ускорить его можно максимум на 10-15%.

for a in range(99999999):
pas = f'{a:08d}'
print(pas, end='\r')

print('пароль не найден')

Аватар пользователя
Знаток
6мес

Использую C++

Аватар пользователя
Мыслитель
6мес

Питон медленный язык

Аватар пользователя
Мудрец
6мес

Можно запускать процесс перебора на нескольких ядрах процессора. Делим диапазон чисел между несколькими процессами. И останавливаем все процессы как только пароль найден.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
 import multiprocessing 
 
def brute_force_worker(start, end, stop_event, result_queue): 
    for a in range(start, end): 
        if stop_event.is_set(): 
            return 
        pas = f'{a:08d}' 
        print(pas, end='\r') 
         
        if pas == "12345678":   
            result_queue.put(pas)   
            stop_event.set() 
            return 
 
 
if __name__ == "__main__": 
    total_range = 99999999 
    num_processes = multiprocessing.cpu_count() 
    chunk_size = total_range // num_processes 
 
    stop_event = multiprocessing.Event()   
    result_queue = multiprocessing.Queue()   
 
    processes = [] 
    for i in range(num_processes): 
        start = i * chunk_size 
        end = start + chunk_size if i != num_processes - 1 else total_range + 1 
        process = multiprocessing.Process( 
            target=brute_force_worker, args=(start, end, stop_event, result_queue) 
        ) 
        processes.append(process) 
        process.start() 
 
    found_password = None 
    while not result_queue.empty() or any(p.is_alive() for p in processes): 
        try: 
            found_password = result_queue.get(timeout=0.1) 
            break 
        except: 
            continue 
 
    stop_event.set() 
    for process in processes: 
        process.join() 
 
    if found_password: 
        print(f"\nПароль найден: {found_password}") 
    else: 
        print("\nПароль не найден")