暴力穷举zip压缩文件的密码
Posted 这个是标题,但是为什么要有标题
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了暴力穷举zip压缩文件的密码相关的知识,希望对你有一定的参考价值。
生成密码的方式类似与时钟,末尾遍历完了第k位所有的字符,就让第k位的前一位到下一位字符,第k位回到第0个字符。
对python还不太熟悉,效率比较低,但是能破解简单的密码。
import zipfile #密码可能有的字符 testSetstr = "w.abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#$%&\'()*+,-/:;<=>?@[\\]^_`{|}~" # testSetstr = "0123456789" # testSetLen = len(testSetstr) #字符中长度 maxtestLen = 5 #要猜的密码的最大长度,时间耗时越久。 filename = \'test.zip\' #要解压的文件名 filedir = \'data/\' #解压路径 def testPassword(teststr): r = zipfile.is_zipfile(filename) if r: fz = zipfile.ZipFile(filename,\'r\') try: for file in fz.namelist(): fz.extract(file,filedir,pwd=str.encode(teststr)) print("密码是",teststr) return True except: pass fz.close() else: print(\'不是zip文件,不能解压\') return True return False def test(n): alist = [0] * n while(alist[0] < testSetLen): testlist = [] for i in range(n): testlist.append(testSetstr[alist[i]]) teststr = "".join(testlist) if(testPassword(teststr)): return True alist[n - 1] += 1 for i in range(n-1,0,-1): if(alist[i] > testSetLen - 1): alist[i] = 0 alist[i - 1] += 1 if(i - 1 == 0): print("进度 ",100.0 * alist[i - 1] / testSetLen ,"%") else: break return False def main(): for i in range(maxtestLen): print("正在测试长度为",i + 1,"的密码。") if(test(i + 1)): return main()
对于rar文件也类似,但是我还没跑出来……太慢了:
from unrar import rarfile #密码可能有的字符 testSetstr = "w.abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#$%&\'()*+,-/:;<=>?@[\\]^_`{|}~" # testSetstr = "0123456789" # testSetLen = len(testSetstr) #字符中长度 maxtestLen = 20 #要猜的密码的最大长度,时间耗时越久。 filename = \'xxxxx.rar\' #要解压的文件名 filedir = \'data/\' #解压路径 rar = rarfile.RarFile(filename) def testPassword(teststr): try: rar.extractall(filedir,pwd=teststr) print(filename,"的密码是",teststr) return True except: pass return False def test(n): alist = [0] * n while(alist[0] < testSetLen): testlist = [] for i in range(n): testlist.append(testSetstr[alist[i]]) teststr = "".join(testlist) if(testPassword(teststr)): return True alist[n - 1] += 1 for i in range(n-1,0,-1): if(alist[i] > testSetLen - 1): alist[i] = 0 alist[i - 1] += 1 if(i - 1 == 0): print("进度 ",100.0 * alist[i - 1] / testSetLen ,"%") else: break return False def main(): for i in range(maxtestLen): print("正在测试长度为",i + 1,"的密码。") if(test(i + 1)): return main()
以上是关于暴力穷举zip压缩文件的密码的主要内容,如果未能解决你的问题,请参考以下文章