一个简单的密码生成算法

Author Avatar
FrostMiKu 2017 年 12 月 28 日

这是个啥?

现如今,每个人都有不少网站的帐号,为每一个帐号设置不同的密码会增加大脑的记忆负担,而使用相同的密码则会引发安全问题。

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