手把手教你怎么用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类定义的讲解
Nov 01 Python
python基础教程之自定义函数介绍
Aug 29 Python
Python利用ansible分发处理任务
Aug 04 Python
python读写csv文件实例代码
Jul 05 Python
Python 列表去重去除空字符的例子
Jul 20 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
python文件读写代码实例
Oct 21 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
Jan 25 Python
python 读取串口数据的示例
Nov 09 Python
selenium+超级鹰实现模拟登录12306
Jan 24 Python
python实现商品进销存管理系统
May 30 Python
Python基础学习之奇异的GUI对话框
教你使用pyinstaller打包Python教程
Matplotlib绘制混淆矩阵的实现
只需要100行Python代码就可以实现的贪吃蛇小游戏
PyTorch dropout设置训练和测试模式的实现
May 27 #Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
You might like
地摊中国 - 珍藏老照片
2020/08/18 杂记
Content-type 的说明
2006/10/09 PHP
php中设置index.php文件为只读的方法
2013/02/06 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
PHP实现显示照片exif信息的方法
2014/07/11 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
2016/11/16 Javascript
BootStrap便签页的简单应用
2017/01/06 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
node.js 利用流实现读写同步,边读边写的方法
2017/09/11 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
Python数据可视化之画图
2019/01/15 Python
Python imread、newaxis用法详解
2019/11/04 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
三星英国官网:Samsung英国
2018/09/25 全球购物
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
酒店总经理岗位职责范本
2014/08/08 职场文书
横空出世观后感
2015/06/09 职场文书
父母教会我观后感
2015/06/17 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android