python函数的实例,书写一个创建有针对性的专用密码字典的程序
2024-08-25 02:30:33
python学习,实战学习,函数的学习与使用,综合知识的运用。包括for ,while循环,if...else.. 和if... elif ... else 的条件判断!
问题描述:书写一个创建有针对性的专用密码字典的程序,其中包括的功能模块有:
0,退出程序
1,输入密码原始字符串
2,添加非法字符到列表
3,清空原始密码列表
4,整理原始密码列表
5,改变默认密码长度
6,创建密码列表
7,显示所有密码
8,创建字典文件
实例代码:
#coding=utf-8
'''
Created on 2017年6月1日 @author: 叮当
'''
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':createPasswordFile #创建密码文件
} while True:
mainMenu()
op = raw_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'| |')
print(u'| | 0: 退出程序')
print(u'| | 1: 输入密码原始字符串')
print(u'| | 2: 添加非法字符到列表')
print(u'| | 3: 清空原始密码列表')
print(u'| | 4: 整理原始密码列表')
print(u'| | 5: 改变默认密码长度(%d-%d)' %(minLen, maxLen))
print(u'| | 6: 创建密码列表')
print(u'| | 7: 显示所有密码')
print(u'| | 8: 创建字典文件')
print(u'| |'),
print(u'='*40)
print(u'| |')
print(u'当前非法的字符为:%s' %denyList)
print(u'当前原始密码元素为:%s' %rawList)
print(u'共有密码%d个' %len(pwList))
if flag:
print(u'已在当前目录创建密码文件dic.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的整数,等待%id秒后重新输入' %timeout)
time.sleep(timeout) def getRawList():
''' 获取原始数据列表 '''
clear()
global denyList
global rawList
print(u'输入回车后直接退出')
print(u'当前添加密码列表为: %s' %rawList)
st = None
while not st == '':
st = raw_input('请输入密码元素字符串:')
if st in denyList:
print(u'这个字符串是预先设定的非法字符串')
continue
else:
rawList.append(st)
clear()
print(u'输入回车后直接退出')
print(u'当前添加密码列表为: %s' %rawList)
def addDenyList():
''' 添加非法词 '''
clear()
global denyList
print(u'输入回车后直接退出')
print(u'当前非法字符为: %s' %denyList)
st = None
while not st == '':
st = raw_input('请输入需要添加的非法字符串:')
denyList.append(st)
clear()
print(u'输入回车后直接退出')
print(u'当前非法字符列表为: %s' %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'当前密码长度为:%d-%d' %(minLen-maxLen))
min = raw_input("请输入密码的最小长度:")
max = raw_input("请输入密码的最大长度:")
try:
minLen = int(min)
maxLen = int(max)
except ValueError:
print(u'密码长度只能输入数字[6-18]')
break
if minLen not in xrange(6,19) or maxLen not in xrange(6,19):
print(u'密码长度只能输入数字[6-18]')
minLen = 6
maxLen = 16
continue
if minLen ==maxLen:
res = raw_input("确定将密码长度设定为%d吗?(Yy/Nn)" %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
else:
print(u'设置完毕,等待%d秒后回到主菜单' %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 xrange(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 xrange(minLen, maxLen + 1):
pwList.append(PW)
else:
pass def showPassword():
''' 显示创建的密码 '''
global pwList
global timeout
for i in xrange(len(pwList)):
if i%4 == 0:
print("%s\n" %pwList[i])
else:
print("%s\t" %pwList[i])
print("\n")
print(u'显示%d秒,回到主菜单' %timeout)
time.sleep(timeout) def createPasswordFile():
''' 创建密码字典文件 '''
global flag
global pwList
print(u'当前目录下创建字典文件dic.txt')
time.sleep(timeout)
with open('./dic.txt', 'w+') as fp:
for PW in pwList:
fp.write(PW)
fp.write('\n')
flag =1 if __name__ == '__main__':
main()
运行结果截图:
最新文章
- volley用法之 以post方式发送 json 参数
- linux命令总结
- div css 自适应
- s2 devMode cmdshell
- Java多线程2:Thread中的实例方法
- 自动解析URL
- Mysql忘记用户密码的解决办法
- 【bzoj1502】 NOI2005—月下柠檬树
- HDU 4031 Attack(离线+线段树)(The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest)
- MVC中,视图的Layout使用
- iOS二维码条形码的制作
- Nginx代理TCP服务
- Idea在导入有maven项目时,不能自动识别pom.xml
- 计算机网络(HTTP)之客户识别:cookie机制
- [Swift]LeetCode801. 使序列递增的最小交换次数 | Minimum Swaps To Make Sequences Increasing
- windows主用python3 个别程序使用python2的方法
- C# 对象持久化
- topcoder srm 565 div1
- 彻底理解MapReduce shuffle过程原理
- P1020 导弹拦截 dp 树状数组维护最长升序列
热门文章
- 美团关于分布式ID实践方案
- python安装库报错的处理方法
- RabbitMQ不讲武德,发个消息也这么多花招
- 第14章节 BJROBOT karto 算法构建地图【ROS全开源阿克曼转向智能网联无人驾驶车】
- Android中app开机自启动的开发
- jupyter安装插件Nbextensions,实现代码提示功能(终极方法)
- Servlet[JAX-RS Servlet]的Servlet.init()引发异常
- Dota游戏匹配的所有组合
- Docker安装MySQL,Redis,阿里云镜像加速
- Python使用Protobuf&;&;如何赋值&;&;如何正反序列化