Ускорение перебора паролей в архиве zip

Anonimus2134

Новичок
Пользователь
Апр 22, 2020
15
0
1
Python:
import zipfile
import time


start = time.perf_counter()
count = 1
with open('passwords.txt', 'rb') as text:
    for entry in text.readlines():
        password = entry.strip()
        try:
            with zipfile.ZipFile('locked.zip', 'r') as zf:
                zf.extractall(pwd=password)
                data = zf.namelist()[0]
                data_size = zf.getinfo(data).file_size
                print('''******************************\n[+] Password found! ~ %s\n ~%s\n ~%s\n********************
                **********''' % (password.decode('utf8'), data, data_size))
                break
        except:
            number = count
            print('[%s] [-] Password failed! - %s' % (number, password.decode('utf8')))
            count += 1
            pass
print(time.perf_counter()-start)
Добрый день, проблема заключается в том, что когда пароль архива очень хороший, программа подбирает пароль достаточно долго, можно ли как-то ускорить?(за исключением Cython, Numba, Pypy и т.п.)
 

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
Да, можно воспользоваться многопоточностью. Но, если пароль содержит буквы разных регистров или символы, то это пустая трата времени.
 
  • Мне нравится
Реакции: Anonimus2134

Anonimus2134

Новичок
Пользователь
Апр 22, 2020
15
0
1
Да, можно воспользоваться многопоточностью. Но, если пароль содержит буквы разных регистров или символы, то это пустая трата времени.
Типо сделать функцию с перебором и с помощью thread создать несколько потоков?
 

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
Да. И еще вижу у тебя уже готовый файл с паролями. Если хочешь, комбинировать все возможные вариации слов, то можно воспользоваться: https://docs.python.org/3/library/itertools.html

Python:
import itertools

for password in itertools.product('ABCD1234', repeat=6):
    password = ''.join(password)
    print(f'Пробуем пароль: {password}')

Результат:
Код:
....
Пробуем пароль: 314ADA
Пробуем пароль: 314ADB
Пробуем пароль: 314ADC
Пробуем пароль: 314ADD
Пробуем пароль: 314AD1
....
Пробуем пароль: 314AD2
Пробуем пароль: 314AD3
Пробуем пароль: 314AD4
Пробуем пароль: 314A1A
....
 
  • Мне нравится
Реакции: Anonimus2134

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
Вместо ABCD1234 можешь указать хоть весь алфавит и цифры. И он тебе выдаст все возможные комбинации с использованием этих символов. Но, чем больше символов ты укажешь и чем параметр repeat будет больше, тем дольше он будет работать.
 
  • Мне нравится
Реакции: Anonimus2134

Anonimus2134

Новичок
Пользователь
Апр 22, 2020
15
0
1
Вместо ABCD1234 можешь указать хоть весь алфавит и цифры. И он тебе выдаст все возможные комбинации с использованием этих символов. Но, чем больше символов ты укажешь и чем параметр repeat будет больше, тем дольше он будет работать.
Спасибо большое за ответ и за совет!
 

Форум IT Специалистов