zip密码忘记怎么办?手把手教你几行Python代码来解决,操作简单有手就行

目录

前言

编写程序

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保存重要信息吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

核·蘑菇弹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值