作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于使用 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
最佳答案
我不确定我完全理解该请求,但正如另一位评论者所评论的,您可以做的一件事是使用生成器。首先,您不需要生成密码文件,您可以在生成密码时测试每个密码。为此,您可以从生成器中产生。调整您的代码,我们有:
1 import itertools
2
3 def password_generator(min_length=1, max_length=6, chars='123456789'):
4 for i in range(min_length, max_length):
5 for password in itertools.product(chars, repeat=i):
6 yield ''.join(password)
7
8 # Showing a sample of passowrds.
9 for _, password in zip(range(100), password_generator()):
10 print(password)
11
12 is_successful_extraction = False
13
14 for password in password_generator():
15 try:
16 with zipfile.ZipFile(zip_file_created_a,'r') as zf:
17 zf.extractall(pwd=password)
18 data = zf.namelist()[0]
19 data_size = zf.getinfo(data).file_size
20 print('[+] Extracted - password: {}'.format(password))
21 is_successful_extraction = True
22 break
23 except RuntimeError:
24 print('[-] Failure to extract - password: {}'.format(password))
25
26 if is_successful_extraction:
27 print('[+] Successful extraction')
28 else:
29 print('[!] No extraction complete')
出于多种原因,这很有帮助。首先,生成器具有参数,因此您可以调整要生成的密码的长度。接下来,您不必将所有密码存储在内存或磁盘上。应该会快一点。请注意,readlines 将文件内容存储在 RAM 中。最后,您只需迭代密码一次 - 即生成密码时。
有关生成器的更多信息,请参阅此 link 。
关于python - 如何生成密码文件来破解zip文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57020825/
我是一名优秀的程序员,十分优秀!