目录
前言:
一、破解zip加密文件的思路:
1、准备一个加密的zip文件。
2、zipfile模块可以解压zip文件。
3、itertools.permutations实现全字符的全排列。
二、实操代码:
1、实现解压zip文件:
2、实现字符的全排列:
?三、几位密码不知道也可以破解:
前言:
????????日常工作中,会遇到一些加密的zip文件,但是因为某些原因或者时间过长,密码不知道了。
但是zip文件中文件有很重要很必须。那么,我们试一试万能的Python,暴力破解密码。
一、破解zip加密文件的思路:
1、准备一个加密的zip文件。
2、zipfile模块可以解压zip文件。
解压时可以提供密码zfile.extractall("./", pwd=password.encode("utf8"))
通过函数itertools.permutations("abc", 3)实现全字符的全排列:abc/acb/bca/bac/cab/cba
二、实操代码:
1、实现解压zip文件:
import zipfile
import itertools
filename = "readme.zip"
# 创建一个解压的函数,入参为文件名和密码
# 并使用try-except,避免报错中断程序。
def uncompress(file_name, pass_word):
try:
with zipfile.ZipFile(file_name) as z_file:
z_file.extractall("./", pwd=pass_word.encode("utf-8"))
return True
except:
return False
2、实现字符的全排列:
import zipfile
import itertools
filename = "readme.zip"
# 创建一个解压的函数,入参为文件名和密码
# 并使用try-except,避免报错中断程序。
def uncompress(file_name, pass_word):
try:
with zipfile.ZipFile(file_name) as z_file:
z_file.extractall("./", pwd=pass_word.encode("utf-8"))
return True
except:
return False
# chars是密码可能的字符集
chars = "abcdefghijklmnopqrstuvwxyz0123456789"
for c in itertools.permutations(chars, 4):
password = ''.join(c)
print(password)
result = uncompress(filename, password)
if not result:
print('解压失败。', password)
else:
print('解压成功。', password)
break
本文介绍的zip文件大概知道密码是4位的,字符大概是a-z1-0。并且不存在重复字符的,不会有“aabb”的密码。
zip加压时是选择了zip传统加密!
?三、几位密码不知道也可以破解:
我查了一些资料,zip加密密码最多是12位,那么程序可以修改这样:
import zipfile
import itertools
filename = "readme.zip"
def uncompress(file_name, pass_word):
try:
with zipfile.ZipFile(file_name) as z_file:
z_file.extractall("./", pwd=pass_word.encode("utf-8"))
return True
except:
return False
chars = "abcdefghijklmnopqrstuvwxyz0123456789"
for i in range(12):
for c in itertools.permutations(chars, i):
password = ''.join(c)
print(password)
result = uncompress(filename, password)
if not result:
print('解压失败。', password)
else:
print('解压成功。', password)
break
增加上一个for循环。
|