手把手教你怎么用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字符串对其居中显示的方法
Jul 11 Python
Python 数据结构之队列的实现
Jan 22 Python
Python三种遍历文件目录的方法实例代码
Jan 19 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
Django中使用第三方登录的示例代码
Aug 20 Python
使用python将excel数据导入数据库过程详解
Aug 27 Python
Django中的FBV和CBV用法详解
Sep 15 Python
wxpython+pymysql实现用户登陆功能
Nov 19 Python
Pytorch 实现冻结指定卷积层的参数
Jan 06 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 Python
Python threading.local代码实例及原理解析
Mar 16 Python
python使用列表的最佳方案
Aug 12 Python
Python基础学习之奇异的GUI对话框
教你使用pyinstaller打包Python教程
Matplotlib绘制混淆矩阵的实现
只需要100行Python代码就可以实现的贪吃蛇小游戏
PyTorch dropout设置训练和测试模式的实现
May 27 #Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
You might like
解析MySql与Java的时间类型
2013/06/22 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
php实现的验证码文件类实例
2015/06/18 PHP
php中static 静态变量和普通变量的区别
2016/12/01 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
Vue和Bootstrap的整合思路详解
2017/06/30 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
vue element-ui读取pdf文件的方法
2019/11/26 Javascript
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
python验证码识别教程之利用投影法、连通域法分割图片
2018/06/04 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
中年人生感言
2014/02/04 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
外贸专业求职信
2014/03/09 职场文书
医院院务公开实施方案
2014/05/03 职场文书
销售代理协议书
2014/09/30 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
银行工作心得体会范文
2016/01/23 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记