手把手教你怎么用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操作redis的方法
Jul 07 Python
python实现将内容分行输出
Nov 05 Python
在python中实现对list求和及求积
Nov 14 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 Python
python获取服务器响应cookie的实例
Dec 28 Python
python 自动批量打开网页的示例
Feb 21 Python
Django ORM 查询管理器源码解析
Aug 05 Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 Python
django框架auth模块用法实例详解
Dec 10 Python
Python实现CNN的多通道输入实例
Jan 17 Python
Python2.x与3​​.x版本有哪些区别
Jul 09 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
Python基础学习之奇异的GUI对话框
教你使用pyinstaller打包Python教程
Matplotlib绘制混淆矩阵的实现
只需要100行Python代码就可以实现的贪吃蛇小游戏
PyTorch dropout设置训练和测试模式的实现
May 27 #Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
You might like
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
如何实现JS函数的重载
2006/09/22 Javascript
Javascript String.replace的妙用
2009/09/08 Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
js常用代码段整理
2011/11/30 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
python2 与 python3 实现共存的方法
2018/07/12 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
会计专业自荐信
2013/12/02 职场文书
yy结婚证婚词
2014/01/10 职场文书
给老婆的检讨书
2015/01/27 职场文书
小学语文继续教育研修日志
2015/11/13 职场文书
react 项目中引入图片的几种方式
2021/06/02 Javascript
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB