手把手教你怎么用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 相关文章推荐
python3实现抓取网页资源的 N 种方法
May 02 Python
Python3 Random模块代码详解
Dec 04 Python
1分钟快速生成用于网页内容提取的xslt
Feb 23 Python
Python从零开始创建区块链
Mar 06 Python
Python实现的端口扫描功能示例
Apr 08 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
Oct 11 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
python机器学习包mlxtend的安装和配置详解
Aug 21 Python
Django-imagekit的使用详解
Jul 06 Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
Nov 02 Python
Python函数调用追踪实现代码
Nov 27 Python
Python基础学习之奇异的GUI对话框
教你使用pyinstaller打包Python教程
Matplotlib绘制混淆矩阵的实现
只需要100行Python代码就可以实现的贪吃蛇小游戏
PyTorch dropout设置训练和测试模式的实现
May 27 #Python
pytorch Dropout过拟合的操作
浅谈pytorch中的dropout的概率p
May 27 #Python
You might like
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
php实现等比例不失真缩放上传图片的方法
2016/11/14 PHP
万能的php分页类
2017/07/06 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
js 利用className得到对象的实现代码
2011/11/15 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
JavaScript中检测变量是否存在遇到的一些问题
2013/11/11 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
Python中Proxypool库的安装与配置
2018/10/19 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
大型活动组织方案
2014/05/10 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
国庆节活动总结
2014/08/26 职场文书
授权收款委托书范本
2014/10/10 职场文书
教师学期末个人总结
2015/02/13 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
走进毛泽东观后感
2015/06/04 职场文书
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript
Nginx报404错误的详细解决方法
2022/07/23 Servers