手把手教你怎么用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中的URLError异常的方法
Apr 30 Python
Python使用matplotlib实现在坐标系中画一个矩形的方法
May 20 Python
python分割列表(list)的方法示例
May 07 Python
Numpy 将二维图像矩阵转换为一维向量的方法
Jun 05 Python
python保存文件方法小结
Jul 27 Python
对pandas的层次索引与取值的新方法详解
Nov 06 Python
Python基础教程之异常详解
Jan 10 Python
Python paramiko模块使用解析(实现ssh)
Aug 30 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
利用python实现逐步回归
Feb 24 Python
如何在pycharm中快捷安装pip命令(如pygame)
May 31 Python
Python Django ORM连表正反操作技巧
Jun 13 Python
Python基础学习之奇异的GUI对话框
教你使用pyinstaller打包Python教程
Matplotlib绘制混淆矩阵的实现
只需要100行Python代码就可以实现的贪吃蛇小游戏
PyTorch dropout设置训练和测试模式的实现
May 27 #Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
You might like
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
PHP实现简易计算器功能
2020/08/28 PHP
一个高效的JavaScript压缩工具下载集合
2007/03/06 Javascript
用js做一个小游戏平台 (一)
2009/12/29 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
2011/09/02 Javascript
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
总结Javascript中的隐式类型转换
2016/08/24 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
Python标准库之sqlite3使用实例
2014/11/25 Python
Python中使用ElementTree解析XML示例
2015/06/02 Python
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
基于django channel实现websocket的聊天室的方法示例
2019/04/11 Python
Python切图九宫格的实现方法
2019/10/10 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
银行求职推荐信范文
2013/11/30 职场文书
应届大学生自荐信
2013/12/05 职场文书
简历的自荐信
2013/12/19 职场文书
美德少年事迹材料
2014/01/23 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
公司门卫岗位职责范本
2014/07/08 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
干部考察材料范文
2014/12/24 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
安全主题班会教案
2015/08/12 职场文书
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python