zip密码破解(怎么破解加密zip文件的密码)

发布时间:2025-12-10 23:20:06 浏览次数:1

之前在家里的老电脑中,发现一个加密zip压缩包,由于时隔太久忘记密码了,依稀记得密码是6位字母加数字,网上下载了很多破解密码的软件都没有效果,于是想到自己用Python写一个暴力破解密码的脚本。

Python有一个内置模块zipfile可以干这个事情,测试一波,一个测试文件,设置解压密码为123。

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

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

好了开始破解老文件的密码,为了提高速度我加了多线程最初的代码:

importzipfileimportitertoolsfromconcurrent.futuresimportThreadPoolExecutordefextract(file,password):ifnotflag:returnfile.extractall(path='.',pwd=''.join(password).encode('utf-8'))defresult(f):exception=f.exception()ifnotexception:#如果获取不到异常说明破解成功print('密码为:',f.pwd)globalflagflag=Falseif__name__=='__main__':#创建一个标志用于判断密码是否破解成功flag=True#创建一个线程池pool=ThreadPoolExecutor(100)nums=[str(i)foriinrange(10)]chrs=[chr(i)foriinrange(65,91)]#生成数字+字母的6位数密码password_lst=itertools.permutations(nums+chrs,6)#创建文件句柄zfile=zipfile.ZipFile("加密文件.zip",'r')forpwdinpassword_lst:ifnotflag:breakf=pool.submit(extract,zfile,pwd)f.pwd=pwdf.pool=poolf.add_done_callback(result)

这个代码有个问题,跑一会儿内存就爆了!原因:ThreadPoolExecutor默认使用的是无界队列,尝试密码的速度跟不上生产密码的速度,会把生产任务无限添加到队列中。导致内存被占满。内存直接飙到95:

然后程序奔溃:

看了一下源码发现ThreadPoolExecutor内部使用的是无界队列,所以导致内存直接飙满,重写ThreadPoolExecutor类中的_work_queue属性,将无界队列改成有界队列,这样就不会出现内存爆满的问题,看代码:

importqueuefromconcurrent.futuresimportThreadPoolExecutorclassBoundedThreadPoolExecutor(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)#设置队列大小

最后破解成功,如下图所示。

到此,相信大家对“怎么破解加密zip文件的密码”有了更深的了解,不妨来实际操作一番吧!这里是本站网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

zip密码破解
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477