暴力穷举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压缩文件的密码的主要内容,如果未能解决你的问题,请参考以下文章

mac用fcrackzip命令破解zip压缩文件密码

RAR和ZIP还有7Z都有啥区别

利用 Python 破解 ZIP 或 RAR 文件密码

Ionic Zip 密码设置在 azure blob 存储中,并为 zip 文件夹而不是文件设置最佳压缩

当今破解密码涉及的思路方法总结

如何在 Windows 8 中使用密码解压缩 zip [关闭]