1. 说明
让python去一个个尝试我们设定的密码字符集的排列组合,直到试出来密码。
我设定是每一千次尝试会打印一下,方面关注当前进度和状态。
2. 代码
import zipfile
from itertools import product
import string
def brute_force_zip(zip_filepath, min_length=1, max_length=4):
"""
暴力破解 ZIP 文件密码。
:param zip_filepath: ZIP 文件路径
:param min_length: 密码最小长度
:param max_length: 密码最大长度
:return: 如果找到密码,返回密码;否则返回 None
"""
# chars = string.ascii_letters + string.digits # 使用的字符集:字母和数字
chars = string.digits # 使用的字符集:仅数字
zip_file = zipfile.ZipFile(zip_filepath)
i_turn = 0
for length in range(min_length, max_length + 1):
# 生成字符集内所有可能的密码组合
for pwd in product(chars, repeat=length):
password = ''.join(pwd)
# 进度监控
if i_turn%1000 == 0:
print(f"i_turn: {i_turn},current trying password:{password}")
i_turn = i_turn + 1
try:
# 使用密码尝试解压
zip_file.extractall(pwd=bytes(password, 'utf-8'))
print(f"找到密码:{password}")
return password
except:
pass # 继续尝试下一个密码
print("未能找到密码。")
return None
zip_filepath = r"test.zip" # 替换为你的 ZIP 文件路径
brute_force_zip(zip_filepath, min_length=1, max_length=6)
3. 运行
如果成功找到则会显示类似下面内容: