小编给大家分享一下如何使用Python解决简单的zip文件解压密码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
首先测试文件为test.txt(仅包含单行文本),压缩后文件为test.zip,压缩密码为2340,压缩后删除目录下的txt文件。。
上图注意勾选传统加密。
指的是不用0开头的数字密码,0开头见后面的字母组合。原理就是zipfile模块解压压缩文件时,一旦密码不正确,程序会终止,在try语句只有成功解压的密码才会执行到extract函数调用后面的语句。
代码:
import zipfile import time import threading startTime = time.time() # 判断线程是否需要终止 flag = True def extract(password, file): try: password = str(password) file.extractall(path='.', pwd=password.encode('utf-8')) print("the password is {}".format(password)) nowTime = time.time() print("spend time is {}".format(nowTime-startTime)) global flag # 成功解压其余线程终止 flag = False except Exception as e: print(e) def do_main(): zfile = zipfile.ZipFile("test.zip", 'r') # 开始尝试 for number in range(1, 9999): if flag is True: t = threading.Thread(target=extract, args=(number, zfile)) t.start() t.join() if __name__ == '__main__': do_main()
显然,解压成功,这里提一下这种编码 密码的方式只适用于传统zip加密,winrar有一种新式的默认加密方式,是不可以的。
这里情况密码组合太多,为了防止内存溢出,改用迭代器。这种情况费时很久,可以闲来无事挂着脚本。这里再次压缩文件,密码为python。
import zipfile import random import time import sys class MyIterator(): # 单位字符集合 letters = 'abcdefghijklmnopqrstuvwxyz012345678' min_digits = 0 max_digits = 0 def __init__(self, min_digits, max_digits): # 实例化对象时给出密码位数范围,一般4到10位 if min_digits < max_digits: self.min_digits = min_digits self.max_digits = max_digits else: self.min_digits = max_digits self.max_digits = min_digits # 迭代器访问定义 def __iter__(self): return self def __next__(self): rst = str() for item in range(0, random.randrange(self.min_digits, self.max_digits+1)): rst += random.choice(MyIterator.letters) return rst def extract(): start_time = time.time() zfile = zipfile.ZipFile("test.zip") for p in MyIterator(5, 6): try: zfile.extractall(path=".", pwd=str(p).encode('utf-8')) print("the password is {}".format(p)) now_time = time.time() print("spend time is {}".format(now_time-start_time)) sys.exit(0) except Exception as e: pass if __name__ == '__main__': extract()
字符的序列组合很多,需要等待。
看完了这篇文章,相信你对“如何使用Python解决简单的zip文件解压密码”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。