手把手教你怎么用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的一些用法分享
Oct 07 Python
Python中的super()方法使用简介
Aug 14 Python
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 Python
Python实现类似jQuery使用中的链式调用的示例
Jun 16 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
Jun 19 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
pytorch梯度剪裁方式
Feb 04 Python
Python切片列表字符串如何实现切换
Aug 06 Python
Python find()、rfind()方法及作用
Dec 24 Python
Python基础学习之奇异的GUI对话框
教你使用pyinstaller打包Python教程
Matplotlib绘制混淆矩阵的实现
只需要100行Python代码就可以实现的贪吃蛇小游戏
PyTorch dropout设置训练和测试模式的实现
May 27 #Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
You might like
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
2016/05/26 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
javascript 学习笔记(onchange等)
2010/11/14 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
jQuery、layer实现弹出层的打开、关闭功能
2017/06/28 jQuery
webpack 模块热替换原理
2018/04/09 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
python实现封装得到virustotal扫描结果
2014/10/05 Python
详细解读Python中解析XML数据的方法
2015/10/15 Python
python如何通过protobuf实现rpc
2016/03/06 Python
Python基础教程之正则表达式基本语法以及re模块
2016/03/25 Python
python机器学习之神经网络(三)
2017/12/20 Python
python3中sys.argv的实例用法
2020/04/24 Python
Python中常用的os操作汇总
2020/11/05 Python
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
一篇.NET面试题
2014/09/29 面试题
大学毕业通用个人的求职信
2013/12/08 职场文书
竞选部门副经理的自荐书范文
2014/02/11 职场文书
上班离岗检讨书
2014/09/10 职场文书
2015年学校办公室主任工作总结
2015/07/20 职场文书
幼儿园小班教育随笔
2015/08/14 职场文书
一年级语文教学随笔
2015/08/14 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
Redis Stream类型的使用详解
2021/11/11 Redis