本文主要是介绍Python 枚举破解非传统zip加密方式 使用栈结构深度搜索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Python 枚举暴力破解非传统zip加密方式 使用栈结构深度搜索
原由
最近读一本书,下载的相关文件是zip加密的,没有密码,因此需要破解这个zip文件。
7Zip 7z 方面
非传统zip加密方式(在设置密码界面会有选择),不能是用zipfile库来经行解压。因此使用7z来解压zip文件。
7z.exe x test.zip -pPASSWORD -oOutputDir (-p和-o后紧跟着密码和输出文件夹)
x x选项解压文件,后跟文件名
-pPASSWORD 为密码
-oOutputDir 为输出文件夹名
实例:
“7z.exe x test2.zip -p”+strNow+ " -o"testDir" -aoa"
-aoa为自动重写目录,因为不管正确错误与否,会生成目录,这样下一次尝试解压的时候就会询问是否重写目录或跳过等等,这里使用-aoa选项重写目录。
代码
代码包含注释
import subprocess as spflNm="test2.zip"# 全排列递增dfs破解,使用栈结构而不是递归#设定字典
#tbl="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-*+"
tbl="123" #可以使用简单的字典尝试破解lstTbl=list(tbl)
lstTbl.reverse()for i in range(len(lstTbl)):lstTbl[i] = str(lstTbl[i])#未使用lambda# 无回溯深度搜索 dfs without backtracing#nbr:要破解密码的长度
def brtLnthN(nbr):#栈方向向后stk=list([""])#print("skt",stk)while len(stk)>0:print("栈",stk)strNow=(str(stk[-1]))strOrgn = strNowprint("生成:",stk[-1])if len(strNow)==nbr:print("尝试密码:",strNow)#尝试破解cmd="7z.exe x test2.zip -p"+strNow+ " -o\"testDir\" -aoa" #-aoa自动重写目录print("Cmd:",cmd)rslt=sp.call(cmd)stk.pop()if rslt==0:print("找到密码",end="")breakelse:stk.pop()for chr in lstTbl:stk.append( strNow+chr)return#设定破解密码的长度为3,为了测试,test2.zip的密码是3位的为123,可自行递增长度来经行测试
brtLnthN(3)
结果截图
这篇关于Python 枚举破解非传统zip加密方式 使用栈结构深度搜索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!