【发布时间】:2019-07-17 10:31:26
【问题描述】:
我有一个关于使用 python 破解 zip 文件密码的作业。这不是一个不道德或非法的破解项目,它是一项学校作业。请问如何生成密码并一一测试破解?即先生成密码'0'然后测试ingit,如果破解不成功,则生成第二个密码'1'并再次测试。
我有一些代码,但问题是它只是在生成一堆密码后才开始破解 zip 文件。例如,我将它设置为从'0000'到'9999'开始生成,当我运行代码时,它将生成从'0000'到'9999'的所有密码,然后它就会开始破解zip文件。
这是我的代码:
import zipfile
from datetime import datetime
from itertools import product
import itertools
str_09 = "0123456789"
file_pwd = 'password/pwd-str_09-8.txt'
mystring = str_09
myfile = open(file_pwd, 'w')
for a in range(1,6):
for i in itertools.product(mystring, repeat=a):
myfile.write("%s\n" % ''.join(map(str, i)))
myfile.close()
file_pwd = 'password/pwd-str_09-8.txt'
zip_file_created_a = 'file/a5.zip'
count = 1
with open(file_pwd,'rb') as text:
for entry in text.readlines():
password = entry.strip()
try:
with zipfile.ZipFile(zip_file_created_a,'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
【问题讨论】:
-
我正在使用手机,无法输入答案,但解决此问题的一种方法是将
text.readlines()替换为generator。 -
嗨@AndrewF 如何用生成器函数替换
text.readlines()?我已经通过了生成器功能,但仍然无法弄清楚。