。 3个需要用的函数:
permutation(iterable, r):返回terble中元素所有组合长度为r的项目序列,r省略则默认取iterable中项目的数量。例如itertools.Permutations(‘abc’,3),从“abc" 中按顺序排列组合长度为 3进行输出, 即abc, acb, bac, bca, cab, cba。product(*iterables[, repeat]):可以获得多个循环器的笛卡儿积。例如product(“123”,“abe”),得到的结果是la, 1b, 1c, 2a, 2b, 2c,3a, 3b, 3c。repeat(object[, times]) :这个函数的作用就是重复元素,未指定times则会一直重复。例如repeat(100),即100,100, …接下来编写一个密码字典的生成脚本,具体步骤如下。 需要的文件:person_information,TopPwd(常用密码) person_information
目标姓名全拼:zhangwei 目标姓名简拼:zw 目标手机号码:12341564567 目标生日:19930916 目标生日(年):1993 目标生日(月/日):0916 目标QQ号:435446654 目标爱人姓名全拼:wangfang 目标爱人姓名简拼:wf 目标爱人手机号码:18945658432 目标爱人的生日:19971011 目标爱人生日(年):1997 目标爱人生日(月/日):1011 # -*- coding: utf-8 -*- import itertools def ReadInformationList(): try: informationFile = open('person_information','r') lines = informationFile.readlines() for line in lines: infolist.append(line.strip().split(':')[1]) #数据处理,获取值 except Exception as e: print(e + "\n") print("Read person_informaiton error!") def CreateNumberList(): #数字元素 words = '0123456789' itertoolsNumberList = itertools.product(words,repeat=3) #利用itertools产生不同的数字排列,数字组合长度为3 for number in itertoolsNumberList: numberList.append("".join(number)) def AddTopPwd(): try: #读取toppwd文件,并存入paaaword字典文件 informationFile = open('TopPwd','r') lines = informationFile.readlines() for line in lines: dictionaryFile.write(line) except Exception as e: print(e + "\n") print("Read TopPwd error!") def CreateSpecialList(): #添加特殊字符模块 specialwords = '`~!@#$%^&*()_+?|/<>,.' for i in specialwords: specialList.append("".join(i)) def Combination(): for a in range(len(infolist)): if (len(infolist[a]) >= 8 ): #个人信息大于8位的直接存储到字典 dictionaryFile.write(infolist[a] + "\n") else: needWords = 8 - len(infolist[a]) #个人信息不足8位的补到8位存储 for b in itertools.permutations("1234567890",needWords): dictionaryFile.write(infolist[a] + ''.join(b) + "\n") for c in range(0,len(infolist)): if (len(infolist[a] + infolist[c]) >= 8): dictionaryFile.write(infolist[a] + infolist[c] + '\n') #将个人元素两两进行拼接,大于8位输入字典 for d in range(0,len(infolist)): for e in range(0, len(specialList)): if (len(infolist[a] + specialList[e] + infolist[d] ) >= 8 ): #特殊字符加到中间 dictionaryFile.write(infolist[a] + infolist[d] + specialList[e] + "\n") #特殊字符加到尾部 dictionaryFile.write(infolist[a] + specialList[e] + infolist[d] + "\n") #加到中间 dictionaryFile.write(specialList[e] + infolist[a] + infolist[d] + "\n") dictionaryFile.close() if __name__ == "__main__": global dictionaryFile # 创建字典文件 dictionaryFile = open('passwords','w') global infolist #用户信息列表 infolist = [] global numberList #数字列表 numberList = [] global specialList specialList = [] ReadInformationList() #读取个人信息文件 CreateNumberList() #创建数字列表 CreateSpecialList() AddTopPwd() #常见密码写入字典 Combination() #主函数 print('\n' + u"字典生成成功!" + "\n" + '\n' + u"字典文件名:passwords")Crunch特殊字符
1、% 代表数字 2、^ 代表特殊符号 3、@ 代表小写字母 4、, 代表大写字符 特殊字符一般与参数 -t 配合使用