admin管理员组文章数量:1599731
目录
前言
编写程序
001 - 传统加密
002 - AES加密
003 - 7z加密
源码
前言
当现在zip压缩包已经广泛地使用,zip文件不仅仅节约了电脑内存,还可以给隐私内容设置密码。但是,要是忘记了密码,特别是十分重要的文件,那可真的芭比Q了。
编写程序
你可能想过,把有可能的密码都试一遍。那么,我们可以用Python代码帮助我们尝试。我们可以创建一个字符集,然后把相同位数的字符所有可能的密码全部尝试一遍,如果没有找到密码,就增加位数。这种方式叫做暴力破解,十分简单。
公告:源码在文章底部
001 - 传统加密
那么,首先因为我们要尝试密码,所以要有一个模块来尝试。zipfile是一个十分不错的选择,它是一个十分简单的用于处理zip文件的模块,我们这次就用zipfile来进行尝试。
import zipfile
我们打开要破解的文件,打开文件不需要密码,所以直接打开。(读取解压需要密码)
zf=zipfile.ZipFile("<要破解的文件>")
现在,我们要尝试密码了:我们使用extractall()函数来尝试密码,这个函数本来是解压文件的函数,第一个参数是解压后的目录第二个是压缩包密码。
zf.extractall('./', '<尝试的密码>')
如果密码错误就会报错,所以我们可以使用try-expect来尝试。
try:
zf.extractall('./', '<尝试的密码>'.encode('utf-8'))
expect:
pass
之后,我们就要尝试密码了。
我们首先创建字符集,因为zip文件的密码只支持26个字母大小写、数字和特殊字符,所以只包含这些字符。
l="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!@#$%^&*()`~-=_+[]\\;',./{}|:\"<>?"
l变量就是字符集了。
接下去我们来写一个while循环。
while True:
这个循环的作用是不断增加密码位数。
接下去,我们来生成相同位数的所有可能的密码。
import itertools
mpwd=itertools.permutations(l, n)
这个n就是位数,我们可以将它创建在while循环前面。
现在,我们来编写一个for循环来遍历mpwd:
for pwd in mpwd:
之后,我们就可以尝试密码了:
try:
zf.extractall('./', pwd.encode('utf-8'))
print(f'密码是{pwd}')
break
expect:
pass
经过这样的尝试,就可以得到密码了
002 - AES加密
可是,这种方式不支持AES加密,只能破解传统加密。接下去我们来破解AES加密方法的zip文件
我们这次使用的不是zipfile,是pyzipper,这个模块支持AES解密。
import pyzipper
打开文件:
zf=pyzipper.AESZipFile(zip_file,'r',compression=pyzipper.ZIP_LZMA,encryption=pyzipper.WZ_AES)
设置密码:
zf.setpassword(pwd.encode('utf-8'))
设置完成后不会因为密码错误报错,要尝试解压才知道有没有错误
zf.extractall()
以上关于AES的解密代入前面的代码就可以了
003 - 7z加密
除了zip,7z也是一种十分受欢迎的加密方式。
7z解密代码如下,具体内容见源码:
import py7zr
with py7zr.SevenZipFile('<文件名>', mode='r', password='<尝试的密码>') as z:
z.extractall()
源码
import zipfile
import pyzipper
import itertools
l="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!@#$%^&*()`~-=_+[]\\;',./{}|:\"<>?"
'''传统加密破解'''
n=1
while True:
zf=zipfile.ZipFile("<要破解的文件>")
mpwd=itertools.permutations(l, n)
for pwd in mpwd:
try:
zf.extractall('./', pwd.encode('utf-8'))
print(f'密码是{pwd}')
break
expect:
pass
n+=1
'''AES加密破解'''
n=1
while True:
zf=pyzipper.AESZipFile(zip_file,'r',compression=pyzipper.ZIP_LZMA,encryption=pyzipper.WZ_AES)
mpwd=itertools.permutations(l, n)
for pwd in mpwd:
try:
zf.setpassword(pwd.encode('utf-8'))
zf.extractall()
print(f'密码是{pwd}')
break
expect:
pass
n+=1
'''7z加密破解'''
n=1
while True:
mpwd=itertools.permutations(l, n)
for pwd in mpwd:
zf=py7zr.SevenZipFile('encrypted.7z', mode='r', password=pwd.encode('utf-8'))
try:
zf.extractall()
print(f'密码是{pwd}')
break
expect:
pass
n+=1
不过,既然zip密码可以破解,那么,你还会用zip保存重要信息吗?
版权声明:本文标题:zip密码忘记怎么办?手把手教你几行Python代码来解决,操作简单有手就行 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1728328519a1154457.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论