利用python生成破解字典
有一个加密的zip文件需要解压,目前知道密码为0-9的三位数的密码
利用 itertools生成字典,然后使用zipfile模块,进行解密操作。
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这个文件,可以看到生成的密码。
its.product(words, repeat=6)是这段代码最主要的部分,从给定的字母表中返回选择的列表。由于本例中密码长度为3位,所以此处设定了重复3次(repeat=3)
下面进行解压操作:
# 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)
因为是加密文件,所以用生成的密码文件 逐行读取,尝试密码,最后解压成功。
现实情况中,对于密码的组成可能没有任何线索,所以需要对各种情况去尝试。