为了账号安全,请及时绑定邮箱和手机立即绑定

Python破解带密码的.zip和.rar文件

针对rar文件

从unrar导入了rarfile

pip安装完unrar后,运行的时候报错Couldn't find path to unrar library

需要下载rarlib的库文件,地址:http://www.rarlab.com/rar/UnRARDLL.exe,下载完成后,安装到指定的文件夹。此外,还需要配置环境变量:

64位操作系统配置x64文件夹中带64的UnRAR64.dll

https://img1.sycdn.imooc.com//5fdda8e300013d5406670190.jpg

32位操作系统配置直接配置UnRAR.dll

https://img1.sycdn.imooc.com//5fddaa3c0001b61406670190.jpg

完成后重启PyCharm。

针对zip文件(可解压的压缩类型有限)

我一开始解压zip文件的时候没有反应,后面我用下面的代码进行了测试:

import zipfile
fp = zipfile.ZipFile('D:/test.zip')  # 文件的路径与文件名
fp.extractall(path='D:/Java',members=fp.namelist(), pwd=b'000555')  # 循环解压文件到指定目录
fp.close()  # 关闭文件,必须有,释放内存

https://img1.sycdn.imooc.com//5fddae070001ba2d09780343.jpg

经过我的查询源代码发现,此处可解压的ZIP类型只支持下面几种

https://img1.sycdn.imooc.com//5fddae500001e9be09320358.jpg

于是在重新压缩文件设置密码的时候,勾选 了ZIP传统加密,才解压成功。

https://img1.sycdn.imooc.com//5fddae9c0001495d03360375.jpg

完整代码如下,本代码针对的密码字典为6位的纯数字,可根据需要找对应的密码字典:

import os
import zipfile

from unrar import rarfile

#生成密码字典
# f = open('D:/SixPwdDict.txt','w')
# for id in range(1000000):
#     password = str(id).zfill(6)+'\n'
#     print(password)
#     f.write(password)
# f.close()

def decryptRarZipFile(filename,desPath,pwdname):
    global fp
    try:
        fpPwd=open(pwdname)
    except:
        print('No file')
        return
    if filename.endswith('.zip'):#解压zip文件
        fp=zipfile.ZipFile(filename)
        for pwd in fpPwd:
            success = 0
            pwd = pwd.rstrip()
            try:
                print('当前密码:', pwd, '密码长度:', len(pwd))
                fp.extractall(path=desPath, pwd=pwd.encode())
                print('Success!password====>' + pwd)
                success = 1
                fp.close()
            except:
                pass
            if success == 1:
                break
    elif filename.endswith('.rar'):#解压rar文件
        fp=rarfile.RarFile(filename)
        for pwd in fpPwd:
            success=0
            pwd=pwd.rstrip()
            try:
                print('当前密码:', pwd,'密码长度:',len(pwd))
                fp.extractall(path=desPath,pwd=pwd)
                print('Success!password====>'+pwd)
                success=1
                fp.close()
            except:
                pass
            if success==1:
                break
    fpPwd.close()

if __name__=='__main__':
    filename='D:/txt.rar'#需解压的文件
    desPath = 'D:/Java'#解压的目的路径
    pwdname='D:/SixPwdDict.txt'#密码字典
    if os.path.isfile(filename) and filename.endswith(('.zip','.rar')):
        decryptRarZipFile(filename,desPath,pwdname)
    else:
        print('Must be rar or zip file')

解压成功效果

https://img1.sycdn.imooc.com//5fddafd90001580c06880286.jpg

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消