暴力窮舉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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM