发布时间:2017-11-12 00:18:31编辑:Run阅读(4109)
函数
曾经有一句非常出名的话是 In Unix Everything Is A File,在unix中所有的一切都是文件
在这里可以借鉴一下 In Python Everything Is A Function,在python程序中,所有的一切都是函数,把所需的功能写成一个一个的函数,然后由函数调用函数,以此类推,最终完成整个程序的功能
记得之前提过暴力破解,不管用什么工具,暴力破解都少不了一个合适的字典,下面编写一个简单的程序makepasswordfilefunction.py,创建一个有针对性的专用密码字典
代码如下
# coding: utf-8 __author__ = 'www.py3study.com' import os import platform import itertools import time def main(): '''主程序''' global rawlist #原始数据列表 rawlist = [] global denylist #非法单词列表 denylist = [' ', '', '@'] global pwlist #最终的密码列表 pwlist = [] global minlen #密码的最小长度 minlen = 6 global maxLen #密码的最大长度 maxLen = 16 global timeout timeout = 3 global flag flag = 0 run = { '0': exit, #退出 '1': getrawlist, #创建原始列表 '2': adddenylist, #添加不可能出现的元素 '3': clearrawlist, #清空列表 '4': setrawlist, #原始列表排序 '5': modifypasswordlen, #修改最终的密码长度 '6': createpasswordlist, #创建最终的字典列表 '7': showpassword, #显示密码 '8': createpassowrdfile, #创建密码文件 } while True: mainMenu() op = input('输入选项:') if op in map(str, range(len(run))): run.get(op)() else: tipMainMenuInputError() continue def mainMenu(): '''主菜单''' global denylist global rawlist global pwlist global flag clear() print(u"||") print(u"="*40) print(u"|| 0:退出程序") print(u"|| 1:输入密码原始字符串") print(u"|| 2:添加非法字符串到列表") print(u"|| 3:清空原始密码列表") print(u"|| 4:整理原始密码列表") print(u"|| 5:改变默认密码长度({}-{})".format(minlen, maxLen)) print(u"|| 6:创建密码列表") print(u"|| 7:显示所有密码") print(u"|| 8:创建字典文件") print(u"||") print(u"="*40) print(u"||") print(u"当前非法字符为:{}".format(denylist)) print(u"当前原始密码元素为:{}".format(rawlist)) print(u"共有密码{}个".format(len(pwlist))) if flag: print(u"已在当前目录创建密码文件dict.txt") else: print(u"尚未创建密码文件") def clear(): '''清屏函数''' OS = platform.system() if (OS == u'Windows'): os.system('cls') else: os.system('clear') def tipMainMenuInputError(): '''错误提示''' clear() print(u"只能输入0-7的整数,等待{}秒后重新输入".format(timeout)) time.sleep(timeout) def getrawlist(): '''获取原始数据列表''' clear() global denylist global rawlist print(u"输入回车后直接退出") print(u"当前的原始密码列表为:{}".format(rawlist)) st = None while not st == '': st = input("请输入密码元素字符串:") if st in denylist: print(u"这个字符串是预先设定的非法字符串") continue else: rawlist.append(st) clear() print(u"输入回车后直接退出") print(u"当前原始密码列表为:{}".format(rawlist)) def adddenylist(): '''添加非法词''' clear() global denylist print(u"输入回车后直接退出") print(u"当前非法字符为:{}".format(denylist)) st = None while not st == '': st = input("请输入需要添加的非法字符串:") denylist.append(st) clear() print(u"输入回车后直接退出") print(u"当前原始密码列表为:{}".format(denylist)) def clearrawlist(): '''清空原始数据列表''' global rawlist rawlist = [] def setrawlist(): '''整理原始数据列表''' global rawlist global denylist a = set(rawlist) b = set(denylist) rawlist = [] for str in set(a - b): rawlist.append(str) def modifypasswordlen(): '''修改默认密码长度''' clear() global maxLen global minlen while True: print(u"当前密码长度为{}-{}".format(minlen, maxLen)) min = input("请输入密码最小长度:") max = input("请输入密码最大长度:") try: minlen = int(min) maxLen = int(max) except ValueError: print(u"密码长度只能输入数字[6-18]") break if minlen not in range(6,19) or maxLen not in range(6,19): print(u"密码长度只能输入数字[6-18]") minlen = 6 maxLen = 16 continue if minlen == maxLen: res = input(u"确定将密码长度设定为{}吗?(Yy/Nn)".format(minlen)) if res not in list('yYnN'): print(u"输入错误,请重新输入") continue elif res in list('yY'): print(u"好吧,你确定就好") break else: print(u"给个机会,改一下吧") continue elif minlen > maxLen: print(u"最小长度比最大长度还大,可能吗?请重新输入") minlen = 6 maxLen = 16 continue else: print(u"设置完毕,等待{}秒后回主菜单".format(timeout)) time.sleep(timeout) break def createpasswordlist(): '''创建密码列表''' global rawlist global pwlist global maxLen global minlen titlelist = [] swapcaselist = [] for st in rawlist: swapcaselist.append(st.swapcase()) titlelist.append(st.title()) sub1 = [] sub2 = [] for st in set(rawlist + titlelist + swapcaselist): sub1.append(st) for i in range(2,len(sub1) + 1): sub2 += list(itertools.permutations(sub1, i)) for tup in sub2: PW = '' for subPW in tup: PW += subPW if len(PW) in range(minlen, maxLen + 1): pwlist.append(PW) else: pass def showpassword(): '''显示创建的密码''' global pwlist global timeout for i in range(len(pwlist)): if i % 4 == 0: print("{}".format(pwlist[i])) else: print("{}".format(pwlist[i])) print('\n') print(u"显示{}秒,回到主菜单".format(timeout)) time.sleep(timeout) def createpassowrdfile(): '''创建密码文件''' global flag global pwlist print(u"当前目录下创建字典文件:dict.txt") time.sleep(timeout) with open('dict.txt', 'w') as fp: for PW in pwlist: fp.write(PW) fp.write('\n') flag = 1 if __name__ == '__main__': main()
应该看到的结果
该脚本将输入的元素根据一定的规则修改,添加后当作新元素添加到元素列表中去,最后将元素列表排列组合得到最后的字典列表
下一篇: python类(class)
47745
46237
37112
34627
29229
25886
24747
19863
19417
17909
5716°
6316°
5836°
5889°
6985°
5829°
5846°
6361°
6316°
7676°