有一个加密的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