python破解zip文件密碼

1、單線程破解純數字密碼

注意: 不包括數字0開頭的密碼

import zipfile,time,sys

start_time = time.time()
def extract():
    zfile = zipfile.ZipFile('IdonKnow.zip')#讀取壓縮包,如果用必要可以加上'r'
    for num in range(1,99999,1):
        try:
            pwd = str(num)
            zfile.extractall(path='.',pwd=pwd.encode('utf-8'))
            print ("當前壓縮密碼爲:",pwd)
            end_time = time.time()
            print ('單線程破解壓縮包花了%s秒'%(end_time-start_time))
            sys.exit(0)
        except Exception as e:
            pass
if __name__=="__main__":
    extract()

破解結果:
在這裏插入圖片描述

2、多線程破解純數字密碼

注意: 不包括數字0開頭的密碼

import zipfile,time,threading

start_time = time.time()
flag = True # 用於判斷線程是否需要終止,爲True時程序執行

def extract(password, file):
    try:
        password = str(password)
        file.extractall(path='.', pwd=password.encode('utf-8'))
        print ("當前壓縮密碼爲:",password)
        end_time = time.time()
        print ('多線程破解壓縮包花了%s秒'%(end_time-start_time))
        global flag
        flag = False#成功解壓其餘線程終止
    except Exception as e:
        pass
def main():
    zfile = zipfile.ZipFile("test.zip", 'r')
    for number in range(1, 99999,1):
        if flag:
            thr1 = threading.Thread(target=extract, args=(number, zfile))
            thr2 = threading.Thread(target=extract, args=(number, zfile))
            
            thr1.start()
            thr2.start()
            
            thr1.join()
            thr2.join()
if __name__ == '__main__':
    main()

破解結果:
在這裏插入圖片描述
提示: 多線程對數字型的運算沒有多大幫助

3、破解英文+數字型的密碼

import random,zipfile,time,sys

class MyIter():
    cset = 'abcdefghijklmnopqrstuvwxyz0123456789'
    def __init__(self,min,max):#迭代器實現初始方法,傳入參數
        if min < max:
            self.minlen = min
            self.maxlen = max
        else:
            self.ninlen = max
            self.maxlen = min
    def __iter__(self):#直接返回slef實列對象
        return self
    def __next__(self):#通過不斷地輪循,生成密碼
        rec = ''
        for i in range(0,random.randrange(self.minlen,self.maxlen+1)):
            rec += random.choice(MyIter.cset)
        return rec
def extract():
    start_time = time.time()
    zfile = zipfile.ZipFile('test1.zip','r')
    for password in MyIter(1,4):#隨機迭代出1~4位數的密碼,在不明確位數的時候做相應的調整
        if zfile:
            try:
                zfile.extractall(path='.',pwd=str(password).encode('utf-8'))
                print ("當前壓縮密碼爲:",password)
                end_time = time.time()
                print ('當前破解壓縮包花了%s秒'%(end_time-start_time))
                sys.exit(0)
            except Exception as e:
                print ('pass密碼:',password)
                pass
if __name__=="__main__":
    extract()

破解結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章