一小段Python代码,破解加密zip文件的密码

Python 有一个内置模块 zipfile 可以解压 zip 压缩包。先来测试一波:创建一个测试文件,压缩,设置解压密码为123。

import zipfile# 创建文件句柄
file = zipfile.ZipFile("测试.zip", 'r')
# 提取压缩文件中的内容,注意密码必须是bytes格式,path表示提取到哪
file.extractall(path='.', pwd='123'.encode('utf-8'))

运行效果如下图所示,提取成功。

既然如此,那我不停尝试所有可能的密码组合去解压缩不就行了嘛~

好了,开始破解老文件的密码。

为了提高速度,我还加了多线程的代码:

import zipfile
import itertools
from concurrent.futures import ThreadPoolExecutordef extract(file, password):if not flag: returnfile.extractall(path='.', pwd=''.join(password).encode('utf-8'))def result(f):exception = f.exception()if not exception:# 如果获取不到异常说明破解成功print('密码为:', f.pwd)global flagflag = Falseif __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: breakf = pool.submit(extract, zfile, pwd)f.pwd = pwdf.pool = poolf.add_done_callback(result)

然而,事情并没有那简单……

代码跑一会儿,内存爆了!

于是,为了找寻问题所在,我就去查看了一下源码,发现ThreadPoolExecutor默认使用的是无界队列。而程序中尝试密码的速度跟不上生产密码的速度,就会把生产任务无限添加到队列中。导致内存被占满。内存直接飙到95:

找到病根儿,剩下的就是对症下药了。

继承并重写了ThreadPoolExecutor类中的_work_queue属性,将无界队列改成有界队列,这样就不会出现内存爆满的问题,看代码:

import queue
from concurrent.futures import ThreadPoolExecutorclass 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) # 设置队列大小

用自定义的BoundedThreadPoolExecutor类替代前面代码中的ThreadPoolExecutor。

再次执行……

程序输入如下图内容:

Bingo!破解成功!(原来密码如此简单……

话说回来,毕竟这个压缩包我是隐约知道它的位数和范围(字母和数字),所以破解出来需要的时间是可以忍受的。如果有天你在网上找了一个无人认领的加密压缩包,想要一窥究竟但又并不知道它有多少位密码,那我只能祝你好运啦~

在这里还是要推荐下我自己建的Python学习Q群:831804576,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),
包括我自己整理的一份2022最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/40913.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源治理工具选一个

随着开源技术在云计算、大数据、AI领域的不断运用,不断破除技术壁垒,让企业快速建立自身的应用,在开源软件基础一,自主研发部分代码,便可以推出企业自身品牌的产品,开源技术的应用极大的推动了云计算、大数…

机器人微控制器编程(CoCube)-破除定势

从课程到生活; 从书本到理想; 从程序到生态; 从个体到集群; 从特殊到一般; 从传统到现代; 从技术到科学; 从理论到工程; 从基础到高阶。 …… 课程归根结底,是为学生服务…

复制浏览器html代码吗,网页文字不能直接复制?只需简单几招即可轻松破除限制,想学吗?...

原标题:网页文字不能直接复制?只需简单几招即可轻松破除限制,想学吗? 想必大家在网上都遇到这样的问题,网页文字受到限制无法直接复制,这该如何是好呢? 既不想登录注册又想直接复制走内容&#…

LR低代码快速开发平台 高效调整企业组织架构

组织架构以及围绕组织架构的设计、实施和变革,是企业管理永恒的话题,它上承公司的业务战略和运营模式,下接业务流程和信息系统建设,重要性不言而喻。数字化变革浪潮之下,商业模式的颠覆、价值链的重塑都需要由相匹配的…

自己动手写编译器:通过语法编译构建语法树并实现中间代码生成

上一节我们手动构造了语法树,然后调用各个节点实现中间代码生成。语法树的构建由语法解析完成,本节我们要完成语法解析逻辑,在语法解析过程中构造语法树,然后再像上一节那样实现中间代码生成。 这里我们再次回顾一下左递归&#…

安卓原神QQ机器人搭建教程

1,下载安装Termux 下载地址:https://f-droid.org/packages/com.termux/ 滑到下面点击这个 2,打开Termux,安装Ubuntu 安装模拟权限git,python,执行下面命令 pkg install proot git python -y 3&#xff…

如何在windows电脑上完成原神签到、祈愿抽卡分析等功能

一款开源的游戏辅助工具——原神助手。支持原神签到、祈愿抽卡分析、查看便签状态和游戏详细数据等。 开发者自述也是偶然间接触到《原神》,于是一发不可收拾,爱上这款游戏了。 在游戏中,如果要查看角色信息等内容,就必须需要登…

不同服务器的ps4账号吗,原神PC与PS4互通数据吗 不同平台数据互通分析

原神最近上线了pc版本,那么,你知道PC与PS4互通吗?这是很多玩家关心的问题,不同的平台,数据能否互通呢?比如说,不同平台是否可以一起玩,不同平台帐号是否可以切换,下面就为…

如何在 Mac 上玩原神?简单三步流畅运行

该方法也是本人一点点摸索出来的,花了很久,已经帮大家踩过坑了,该方法是最简单方便的,而且画质高、运行流畅,甘雨姐姐我来了~ 注意此方法只支持 M 系列芯片 一、安装 playCover github 源码地址 :https:/…

指令微调数据集整理

文章目录 开源指令数据集斯坦福数据链家数据Baize(基于少量种子问题的对话数据) 垂直领域数据集医疗领域的英文数据医疗领域的中文数据法律领域中文数据 COIG数据集(可商用的中文数据集) 开源指令数据集 斯坦福数据 斯坦福52K英文指令数据:…

Linux下使用Samba做域控

AI画妹子的工作先暂告一段落。毕竟戗行也是要有门槛的。 企业中使用Windows Server使用活动目录集中管理PC、服务器是很成熟的方案。突然想到,如果有一天出于某种原因不再使用微软方案了,AD该如何替代?问了一下chatGPT,它说&…

LINUX下设置postgresql的登录密码

1、postgresql登录密码主要是修改2个方向:首先用户有密码,其次是在配置文件中设置登录的限制参数 2、修改密码: alter role postgres with password Postgres; 提示面修改完成 3、修改配置文件pg_hub.conf,在IPV4下或者本地local下&#x…

获取 Panabit Linux 版 root 密码

面包多 - Panabit - root 密码重置工具https://mbd.pub/o/bread/mbd-Y5yTk5hx 可以重置 Panabit Linux 版本的 root 密码,直接获取 root 权限。 下载并在 Panabit 应用商店手动安装后就能看到列表中有新增 root 密码重置工具 打开 工具页面就可以对 root 密码进行重…

PostgreSQL数据库设置登录数据库密码

PostgreSQL数据库安装完以后会默认创建一个管理员的账号postgres用户,默认登录时是不需要密码验证就可以直接登录的 修改用户登录认证密码有两种方式: 1、用命令行的sql语句来进行修改 登录到PostgreSQL数据库里 [rootnode1 ~ 10:51:32]# su postgres b…

phpMyAdmin中config.inc.php设置密码和修改密码的方法

phpMyAdmin有3种授权模式: 1. cookie: 显示一个web登录页面,输入mysql的用户名和密码,然后进入管理界面。 $cfg[Servers][$i][auth_type] cookie; /* Server parameters */ $cfg[Servers][$i][host] localhost; $cfg[Servers][$i][connect_…

使用pgAdmin 4来修改PostgreSQL中的用户密码

参考博客: https://blog.csdn.net/solocoder/article/details/100593380 1、首先是打开我们的软件:pgAdmin 4.app运行起来 2、浏览器会默认打开一个界面如下: 3、然后是依次找到如下的 Servers-> PostgreSQL 11->Login/Group Roles-&…

ChatGPT一出,这10大职业可能先丢饭碗

转自:新智元 编辑:David 【导读】ChatGPT一出,很多人害怕自己的工作会被AI取代。最近,有外媒盘点了最可能被ChatGPT取代10大高危职位。 自从去年11月发布以来,OpenAI的ChatGPT已经被用来写求职信,创作儿童读…

Langchain-agent入门笔记(1)

LangChain里的Agent实现 官方模块介绍文档:Agents — 🦜🔗 LangChain 0.0.191 官网API文档:Agents — 🦜🔗 LangChain 0.0.191 核心要点: (1)需要依赖于用户输入的未…

5分钟带你了解Android Room

1、前言 最近在开发中,Room用的比较多,时不时要查资料,干脆写一篇Room的使用和Room的封装。如果写的不好,或者有错误之处,恳请在评论、私信、邮箱指出,万分感谢🙏 2、添加依赖 dependencies …

AI自动生成代码,是时候冷静下来思考如何保障代码安全了

HDC期间可参与华为开发者大会Check新人抽奖活动,活动链接在文末。 华为开发者大会2023将于7月7日与各位开发者进行见面,本次大会的主题演讲内容为:AI重塑千行百业。 自从AI聊天被推出之后,其热度就一直是高居不下。身边的小伙伴们…