密码字典生成原理比较简单,主要靠正常的按序叠加生成,故所需时间以及较大的内存资源
首先定义一个密码字典所需的资源表,然后用循环生成一个所有的一位密码的密码本,然后读取该密码本并在其第二位依次添加新元素生成二位密码,依此循环生成多位密码
#该密码字典生成算法所需调用的内存资源较大,四位密码生成速度较快,五位及以上所需时间和空间随几何倍数增长
#定义一个所需密码元素的表
lis=[1,2,3,4,5,6,7,8,9,0,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',',','.','/','?','<','>','{','}',';',':',' ','"','[',']','`','~','!','@','#','$','%','^','&','*','(',')','_','-','+','=','|']
#以下函数为用以生成新密码的函数,读取已有密码的一行用循环加上新元素
def mk(nu,nam):
name1=str(nam)+str(nu)+'.'+'txt'
nu=nu+1
name2=str(nam)+str(nu)+'.'+'txt'
f=open(name1)
line = f.readline()
while line:
f1=open(name2,'a')
line = line.strip('\n')
for j in lis:
f1.write(str(line)+str(j)+'\n')
line=f.readline()
f1.close()
f.close()
#该函数用以将各个位的密码写入到统一的密码文件中
def fin(nu1,nam1):
name3=str(nam1)+str(nu1)+'.'+'txt'
name4=str(nam1)+'.'+'txt'
f=open(name3)
line=f.readline()
while line:
f1=open(name4,'a')
line=line.strip('\n')
f1.write(str(line)+'\n')
line=f.readline()
f1.close()
f.close()
number=int(input('请输入密码位数:'))
passbook=str(input('请输入密码本名字:'))
#将密码所需的参数统一格式
passbook1=str(passbook)+'0'+'.'+'txt'
number1=number-1
#将一位的密码写入密码本
f=open(passbook1,'a')
for i in lis:
f.write(str(i)+'\n')
f.close()
#生成其他位的密码本
for i in range(number1):
passbook=str(passbook)
mk(i,passbook)
#将所生成密码统一到一个文本中
for i in range(number):
passbook=str(passbook)
fin(i,passbook)