想要写这个代码是很久以前的事情了,以前就一直觉得密码只能记得个大概,知道一些元素,但又忘记了具体是什么,就很烦。。。然后前几天又有同学遇到了这个困惑,老是忘记自己学校账号的密码,于是就想着写这么一个脚本…可是由于自身水平不够,一直没想到怎么写,然后就在网上copy了一个脚本,顺便修改整合了一下。
该代码适用于在cmd命令行中运行,将你输入的密码单元以’*’显示
Talk is cheap,show me the code.Here we go.
#将密码以星号显示,idle无效,在cmd下有效
def pwd_input(msg = ''):
import msvcrt
if msg != '':
print(msg)
chars = []
while True:
newChar = str(msvcrt.getch(),encoding='utf-8')
#newChar = msvcrt.getch()
if newChar in '\3\r\n': # 如果是换行,Ctrl+C,则输入结束
print('')
if newChar in '\3': # 如果是Ctrl+C,则将输入清空,返回空字符串
chars = []
break
elif newChar == '\b': # 如果是退格,则删除末尾一位
if chars:
del chars[-1]
msvcrt.putch(b'\b')
msvcrt.putch(b' ')
msvcrt.putch(b'\b')
else:
chars.append(newChar)
msvcrt.putch(b'*') # 显示为星号
return ''.join(chars)
i=1
#=====================================================================
#以写的方式创建密码单元本
with open ("foo.txt", "w") as fo:
text=' '
while(text!=''):
text=pwd_input('请输入密码的第%d个单元(按下回车结束输入):' %i)
#text=input('请输入密码的第%d个单元(按下回车结束输入):' %i)
i=i+1
fo.write(text+'\n')
def createWords(currentWidth,wordslist,lastresultList,totalArray):
if 1==currentWidth:
lastresultList=[]
lastresultList.extend(wordslist)
totalArray.extend(wordslist);
return lastresultList;
else:
preWords= createWords( currentWidth-1, wordslist, lastresultList,totalPwd)
lastresultList=[]
for word in wordslist:
for lastWord in preWords:
newResult=word+lastWord
totalArray.append(newResult)
lastresultList.append(newResult)
return lastresultList
# ===========================================================================
fo=open('foo.txt','r')
array = [];
totalPwd= [];
for line in fo.readlines():
line = line.strip("\n")
array.append(line)
array.pop()
fo.close()
print('======================')
print('单元数据共:%d个' %(len(array)))
xwidth=int(input('请输入所要组成密码的单元数:')) #生成密码的用的元数据个数,生成2个单元的密码,这里可以为大于1的任何整数,
resultWorlds=createWords(xwidth,array,array,totalPwd)
print("组成的%d位密码共%d个" %(xwidth,len(resultWorlds)))
with open('pw.txt','w') as f:
for i in range(len(totalPwd)):
f.write(totalPwd[i]+'\n')
以上脚本使用方法:在cmd中运行,根据操作提示即可生成根据特定单元生成的密码字典