手把手教你怎么用Python实现zip文件密码的破解


Posted in Python onMay 27, 2021

Python有一个内置模块zipfile可以干这个事情,测试一波,一个测试文件,设置解压密码为123。

手把手教你怎么用Python实现zip文件密码的破解

import zipfile
 
# 创建文件句柄
file = zipfile.ZipFile("测试.zip", 'r')
# 提取压缩文件中的内容,注意密码必须是bytes格式,path表示提取到哪
file.extractall(path='.', pwd='123'.encode('utf-8'))

运行效果如下图所示,提取成功。

手把手教你怎么用Python实现zip文件密码的破解

好了开始破解老文件的密码,为了提高速度我加了多线程最初的代码:

import zipfile
import itertools
from concurrent.futures import ThreadPoolExecutor
 
def extract(file, password):
    if not flag: return
    file.extractall(path='.', pwd=''.join(password).encode('utf-8'))
 
 
def result(f):
    exception = f.exception()
    if not exception:
        # 如果获取不到异常说明破解成功
        print('密码为:', f.pwd)
        global flag
        flag = False
 
 
if __name__ == '__main__':
    # 创建一个标志用于判断密码是否破解成功
    flag = True
    # 创建一个线程池
    pool = ThreadPoolExecutor(100)
    nums = [str(i) for i in range(10)]
    chrs = [chr(i) for i in range(65, 91)]
    # 生成数字+字母的6位数密码
    password_lst = itertools.permutations(nums + chrs, 6)
    # 创建文件句柄
    zfile = zipfile.ZipFile("加密文件.zip", 'r')
    for pwd in password_lst:
        if not flag: break
        f = pool.submit(extract, zfile, pwd)
        f.pwd = pwd
        f.pool = pool
        f.add_done_callback(result)

这个代码有个问题,跑一会儿内存就爆了!原因:ThreadPoolExecutor默认使用的是无界队列,尝试密码的速度跟不上生产密码的速度,会把生产任务无限添加到队列中。导致内存被占满。内存直接飙到95:

手把手教你怎么用Python实现zip文件密码的破解

然后程序奔溃:

手把手教你怎么用Python实现zip文件密码的破解

看了一下源码发现ThreadPoolExecutor内部使用的是无界队列,所以导致内存直接飙满,重写ThreadPoolExecutor类中的_work_queue属性,将无界队列改成有界队列,这样就不会出现内存爆满的问题,看代码:

import queue
from concurrent.futures import ThreadPoolExecutor
 
 
class BoundedThreadPoolExecutor(ThreadPoolExecutor):
    def __init__(self, max_workers=None, thread_name_prefix=''):
        super().__init__(max_workers, thread_name_prefix)
        self._work_queue = queue.Queue(self._max_workers * 2) # 设置队列大小

最后破解成功,如下图所示。

手把手教你怎么用Python实现zip文件密码的破解

到此这篇关于手把手教你怎么用Python实现zip文件密码的破解的文章就介绍到这了,更多相关Python破解zip密码内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python list中append()与extend()用法分享
Mar 24 Python
Python内置函数dir详解
Apr 14 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
Jul 30 Python
使用Python的turtle模块画图的方法
Nov 15 Python
Python 中字符串拼接的多种方法
Jul 30 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
使用APScheduler3.0.1 实现定时任务的方法
Jul 22 Python
python创建ArcGIS shape文件的实现
Dec 06 Python
Python异常处理机制结构实例解析
Jul 23 Python
Python开发五子棋小游戏
Apr 28 Python
Python基础学习之奇异的GUI对话框
教你使用pyinstaller打包Python教程
Matplotlib绘制混淆矩阵的实现
只需要100行Python代码就可以实现的贪吃蛇小游戏
PyTorch dropout设置训练和测试模式的实现
May 27 #Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
You might like
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
如何在php中正确的使用json
2013/08/06 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
2014/05/29 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
Javascript 自定义类型方法小结
2010/03/02 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
js前端导出Excel的方法
2017/11/01 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
Python对列表中的各项进行关联详解
2017/08/15 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
简单了解python 邮件模块的使用方法
2019/07/24 Python
python 实现dict转json并保存文件
2019/12/05 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
详解Scrapy Redis入门实战
2020/11/18 Python
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
上课玩手机的检讨书
2014/10/01 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
婚前财产协议书范本
2014/10/19 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
元旦主持词开场白
2015/05/29 职场文书
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL