Py暴力破解压缩文件密码
2022-05-28
循序渐进,先来zip文件
首先
import zipfile import os zipstream = zipfile.ZipFile("no.zip" ,"r")#申明zip,这个类似于文件句柄吧,主要是申明一个文件流,学过C可能好理解一点 for ename in zipstream.namelist():#输出zip里面的每一个文件名称 print(ename)
然后逐个解压文件
import zipfile import os zipstream = zipfile.ZipFile(r"C:\Users\YuEr\Desktop\no.zip" ,"r") for ename in zipstream.namelist(): print(ename) zipstream.extract(ename , "Test" )#解压该zip里面每个文件到当前工作目录下 Test 文件夹内,如果没有会自己创建,如果有则直接解压到里面去 zipstream.close()
那么问题来了,压缩包有密码咋办
import zipfile import os zipstream = zipfile.ZipFile(r"C:\Users\YuEr\Desktop\no.zip" ,"r") for ename in zipstream.namelist(): print(ename) zipstream.extract(ename , "Test" ,b"pw" )#第一个参数为数组中的每个元素,第二个参数为保存文件目录(该代码为当前工作目录的Test文件夹),第三个参数为密码,该密码为 "pw" ,前面的b是转义符,转义为byte zipstream.close()
解压文件还有一种不需要用到循环的
import zipfile import os zipstream = zipfile.ZipFile(r"C:\Users\YuEr\Desktop\no.zip" ,"r") zipstream.extractall(path=r'C:\Users\YuEr\Desktop\Test', members=zipstream.namelist(), pwd= b'pw')#第一个参数为存储的文件夹,第二个参数为需要解压的文件(改代码就是说上面的全部都解压),第三个参数为密码,该密码为 "pw" ,前面的b是转义符,转义为byte zipstream.close()
由于出现了格式的转换,所以这里提供了,Python中byte 和 string 类型的互换,应该看得懂吧。看不懂联系我就是了。
bytepw = next(passwd).encode('gbk') stringpw = bytepw.decode('gbk')
循序渐进,如果知道zip压缩包密码的长度爆破则更加快捷。
import zipfile import os import itertools num = input("Please enter the password length:") cc = int(num) passwd = ("".join(x) for x in itertools.product("abcd", repeat=cc)) while( 1 > 0): try: zipstream = zipfile.ZipFile(r"C:\Users\YuEr\Desktop\no.zip" ,"r") bytepw = next(passwd).encode('gbk') zipstream.extractall(path=r'C:\Users\YuEr\Desktop\Test', members=zipstream.namelist(), pwd= bytepw) zipstream.close() print("PW IS " + bytepw.decode('gbk')) except: pass
简单说一下,这段代码为什么会产生,为什么不一次就写完所有长度的密码,其实我是考虑到了破解速度,如果你一次计算所有位数的,其实11位的密码计算机就已经要算很久了,如果我一个计算机只运算一个特定长度的密码,那么多台电脑可以同时爆破,我想对于你的效率会有提高,所以才会出现这种代码,当然了,你也可以一台电脑开多个窗口,每个窗口运算一个长度的密码,大大提高效率!
发表评论: