手把手教你怎么用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创建进程fork用法
Jun 04 Python
Python实现带百分比的进度条
Jun 28 Python
python中reload(module)的用法示例详解
Sep 15 Python
Python实现霍夫圆和椭圆变换代码详解
Jan 12 Python
Python DataFrame.groupby()聚合函数,分组级运算
Sep 18 Python
python 获取毫秒数,计算调用时长的方法
Feb 20 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
pandas的qcut()方法详解
Jul 06 Python
使用 Django Highcharts 实现数据可视化过程解析
Jul 31 Python
python Django里CSRF 对应策略详解
Aug 05 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
May 22 Python
什么是python的自省
Jun 21 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格式化工具Beautify PHP小小BUG
2008/04/24 PHP
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
Laravel框架Eloquent ORM删除数据操作示例
2019/12/03 PHP
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
Python lambda和Python def区别分析
2014/11/30 Python
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
德国骆驼商店:ActiveFashionWorld
2017/11/18 全球购物
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
三陽商会官方网站:Sanyo iStore
2019/05/15 全球购物
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
财务管理职业生涯规划范文
2013/12/27 职场文书
建筑工程管理专业自荐信范文
2013/12/28 职场文书
网上开店必备创业计划书
2014/01/26 职场文书
水电施工员岗位职责
2015/04/11 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
React实现动效弹窗组件
2021/06/21 Javascript
详解JAVA的控制语句
2021/11/11 Java/Android
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB