Задать вопрос

Скрипт подбора пароля к архиву 7z на python?

Задача: подобрать забытый пароль к архиву.
Условия: длинна пароля не более 4-х слов без пробелов. Есть список из 5 слов которые могут быть в пароле в неизвестном порядке.
Сделано:
С помощью itertools.product сгенерировал все возможные варианты порядка слов в пароле и записал в файл.
for word in itertools.product(['first','second','third','fourth','fiftht'], repeat=4):
    print(''.join(word))

Для распаковки 7z архива использую библиотеку py7zr. Для открытия архива с паролем в библиотеке используется функция
with py7zr.SevenZipFile('encrypted.7z', mode='r', password='secret') as Archive: 
     Archive.extractall()
.
Ниже приведен мой код.
passfile = open('\pass.txt', 'r') # открываю файл с паролями для чтения 
Lines = passfile.readlines() # в файле каждый вариант пароля на новой строке. Читаем файл построчно.
for word in Lines: 
    arch = py7zr.SevenZipFile('\Archive.7z', mode='r', password=word)
    arch.extractall(path="\")

Вопрос: как подставлять word (предполагаемый пароль с файла) в параметры функции в password для полного перебора все вариантов.
Помогите, пожалуйста.
  • Вопрос задан
  • 2431 просмотр
Подписаться 3 Простой 5 комментариев
Решения вопроса 1
MinTnt
@MinTnt
Нужно добавить своеобразную "краш" проверку:

passfile = open('\pass.txt', 'r') # открываю файл с паролями для чтения 
Lines = passfile.readlines() # в файле каждый вариант пароля на новой строке. Читаем файл построчно.
for word in Lines: 
    try:
        arch = py7zr.SevenZipFile('\Archive.7z', mode='r', password=word)
        arch.extractall(path="\\")
        print('Пароль "' + word + '" подошёл!')
    except Exception:
        print('Пароль "' + word + '" не подошёл')
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@puankare Автор вопроса
Скорость примерно 1 пароль в секунду. Сам не программист, PEP 8 не учил. Приношу извинения тем у кого от этого кода появятся неприятные рефлексы.
PossiblePassList = ['first','second','third']
for word in PossiblePassList:
    try:
        arch = py7zr.SevenZipFile('\arch.7z', mode='r', password=word)
        arch.extractall(path="\")
        arch.reset() #из документации Once extract() called, the SevenZipFIle object become exhausted and EOF state. If you want to call extractall() again, you should call reset() before it.
        print('Password detected - ' + word)
        break
    except py7zr.Bad7zFile:
        print('Wrong password! ' + word)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы