一个简单的密码生成算法
Python,密码学,算法
内容过时
这篇文章上次修改于 2015 年 6 月 8 日 星期一,部分内容可能已经不适用。
这是个啥?
答: 是小时候写的垃圾,现已被这篇文章取代 2021.9.22
现如今,每个人都有不少网站的帐号,为每一个帐号设置不同的密码会增加大脑的记忆负担,而使用相同的密码则会引发安全问题。
Simple password generator,是一个简单的密码生成器,但这绝不表示生成的密码是简单密码(弱口令)。通过本生成器可使用户仅需记住一个密码(即所有密码的公匙),来通过算法动态生成实际密码,每次密码皆为动态生成,由公匙确保生成密码的一致性,密码数据不做任何保持,具有较高的安全性。
如何使用
启动后输入储存在大脑 中的密码,然后根据不同网站输入不同的key,生成器会实时计算出唯一的值来作为实际密码,密码不做任何保存处理。
输入 exit 退出程序。
原理
其实就是随机数种子的应用= =|||
还有个缺点,前三(四)位固定是大小写字母、数字(符号)搭配...
源码
import random
lower="abcdefghijklmnopqrstuvwxyz"
upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
symbols="!%@#^,./?*;:_"
number="0123456789"
def getstr(legth,str1):
tmp=""
for i in range(legth):
tmp = tmp + random.choice(str1)
return tmp
def getpwd(pwd,key,legth,havesymbol):
passworld=""
random.seed(pwd+key)
if(havesymbol):
passworld = getstr(1,upper)+getstr(1,lower)+getstr(1,number)+getstr(1,symbols)
for i in range(legth-4):
switch=random.randint(0,3)
if(switch==0):
passworld += getstr(1,upper)
elif(switch==1):
passworld += getstr(1,lower)
elif(switch==2):
passworld += getstr(1,number)
else:
passworld += getstr(1,symbols)
else:
passworld = getstr(1,upper)+getstr(1,lower)+getstr(1,number)
for i in range(legth-3):
switch=random.randint(0,2)
if(switch==0):
passworld += getstr(1,upper)
elif(switch==1):
passworld += getstr(1,lower)
else:
passworld += getstr(1,number)
return passworld
pwd=input("请输入公匙:")
while(True):
key=input("请输入关键字(或输入 exit 退出):")
if(key!="exit"):
print("密码为: "+ getpwd(pwd,key,12,True))
else:
break