有一個加密的zip文件須要解壓,目前知道密碼爲0-9的三位數的密碼加密
利用 itertools生成字典,而後使用zipfile模塊,進行解密操做。spa
import itertools as its words = "1234567890" r = its.product(words,repeat=3) dic = open("dictionary.txt",'a') for i in r: dic.write("".join(i)+"\n") dic.close()
打開dictionary這個文件,能夠看到生成的密碼。code
its.product(words, repeat=6)是這段代碼最主要的部分,從給定的字母表中返回選擇的列表。因爲本例中密碼長度爲3位,因此此處設定了重複3次(repeat=3)blog
下面進行解壓操做:ip
# coding=utf-8 import zipfile import os from threading import Thread import time # 壓縮文件的路徑 path = r'D:\py\test\1.zip' # password='1234' def pojie_zip(path, password): if path[-4:] == '.zip': # path = dir+ '\\' +file # print path zip = zipfile.ZipFile(path, "r", zipfile.zlib.DEFLATED) # print zip.namelist() try: # 若解壓成功,則返回True,和密碼 zip.extractall(path='D:\\py\\test\\', members=zip.namelist(), pwd=password) print ' ----success!,The password is %s' % password zip.close() return True except: pass # 若是發生異常,不報錯 print 'error' def get_pass(): # 密碼字典的路徑 passPath = 'D:\\py\\test\\dictionary.txt' passFile = open(passPath, 'r') for line in passFile.readlines(): password = line.strip('\n') print 'Try the password %s' % password if pojie_zip(path, password): break passFile.close() if __name__ == '__main__': start = time.clock() get_pass() print "done (%.2f seconds)" % (time.clock() - start)
由於是加密文件,因此用生成的密碼文件 逐行讀取,嘗試密碼,最後解壓成功。utf-8
現實狀況中,對於密碼的組成可能沒有任何線索,因此須要對各類狀況去嘗試。get