所用知識
1. Pool 進程池
2. try...except 異常處理
3.枚舉的方式
4.生成器的運用
邏輯關系
通過生成假密碼去碰撞!捕獲異常,一直碰撞,直到生成的密碼與壓縮包建立的密碼對應,成功拿到正確的密碼!
具體代碼
import zipfile,time import itertools as its from multiprocessing import Pool #author = __rianley__
def extractFile(numer): password=generate_pwd(numer) #拿到生成器對象,密碼字典過大,只能用生成器否則一下就把內存撐爆了! zFile = zipfile.ZipFile('Suite 6.zip') # 打開zip包 for pwd in password: try: zFile.extractall(pwd=bytes(pwd,"utf-8")) return pwd except Exception as e: # print(pwd) continue def generate_pwd(numer): #生成密碼 words = "1234568790" #密碼范圍:當前表示純數字范圍 r = its.product(words, repeat=numer) for i in r: pwd = '' for num in i: pwd += num yield pwd if __name__ == '__main__': p = Pool() #開啟進程池 res_list = [] # 定義存放進程的列表 for i in range(1, 30): # 設置 隨機密碼的位數(如果別人的設置的密碼) res_run = p.apply_async(extractFile,args=(i,)) # res_run = extractFile(zFile,pwd) res_list.append(res_run) print('正在嘗試破解') # 打印一句提示性的信息 for kill in res_list: data=kill.get() if data: print('破解成功:密碼是:%s'%data) exit()
版本保護
1.轉載請注明出處
2.該文章以及代碼歸作者與博客園所有,嚴禁轉載不注明出處的行為!
3.該文章所闡述的觀點,僅代表個人看法,代碼僅為學習使用!造成任何商業糾紛與原作者無關!
4.本文由程小航編寫!