• 暴力穷举zip、rar压缩文件的密码


      生成密码的方式类似与时钟,末尾遍历完了第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()
  • 相关阅读:
    手游页游和端游的服务端的架构与区别
    TiKV 源码解析系列——如何使用 Raft
    TiKV 源码解析系列
    三篇文章了解 TiDB 技术内幕 —— 谈调度
    三篇文章了解 TiDB 技术内幕——说计算
    三篇文章了解 TiDB 技术内幕——说存储
    TiDB 源码阅读系列文章(一)序
    【合集】TiDB 源码阅读系列文章
    9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路
    python datetime和unix时间戳之间相互转换
  • 原文地址:https://www.cnblogs.com/youmuchen/p/6914510.html
Copyright © 2020-2023  润新知