继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

qq_莫非
关注TA
已关注
手记 21
粉丝 19
获赞 4

针对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

http://img4.mukewang.com/5fdda8e300013d5406670190.jpg

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

http://img2.mukewang.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()  # 关闭文件,必须有,释放内存

http://img4.mukewang.com/5fddae070001ba2d09780343.jpg

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

http://img1.mukewang.com/5fddae500001e9be09320358.jpg

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

http://img4.mukewang.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')

解压成功效果

http://img1.mukewang.com/5fddafd90001580c06880286.jpg

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP