问题
常见问题:
- 密码多不好记忆。
- 密码强度不够高。123456abc和3d8af56,谁看起来更复杂。
- 账号多。
人们往往有很多账号,就会有许多密码。注册新的账号时,也需要密码。人们往往使用的密码就那么几个,密码多了不好记忆。把这些密码记录到一个文件中是可行的,但如果在忘记密码的时候不能读到这个文件就很尴尬,而且这个文件放在网盘等网络存储媒介上也让人不是那么放心(当然你可以把文件加密后在放到网盘上)。
现在的账号通常是手机和邮箱,这些是好记忆的。那能不能通过这些账号来生成对应的唯一密码呢?
思路
单纯用账号生成密码是不安全的。而且一个账号也会在多个地方使用。所以用于密码生成的字符串还要再复杂些,同时要有规律,不然也不好记忆。
用于加密的字符串组成:
- 网站简称,比如:CSDN、QQ
- 账号
- 密码
这里的密码是需要自己记忆的,但需要记忆的不多(比如记忆一个)。
我采用md5算法对上面的算法进行加密。MD5是摘要算法,即最后加密出的密文是唯一对应的(第n次加密和第n+1次加密得出的密文是一样的)。md5可能不是最好的选择,我的目的是保证每次加密后得到唯一的密文,还有很多算法都可以做到这一点。
按照上面的字符串组成规律,每个账号通过MD5计算得到的密文是不一样的(虽然MD5有发生碰撞的可能,即不同原文通过MD5计算得到的密文相同,但这件事发生的概率极低)。
把MD5计算得到的密文转化为16进制字符串,直接用这个密文作为密码(32个字符)可能会过长,可以只取其中几位。
有些密码可能还需要特殊字符和大写字母组成,可以在截取的密文中加上特殊字符。
总结
最后得到的密码对于人而言没有规律,比人们自己想的密码更不好记忆,但不需要人民记忆,唯一需要记忆的密码是用于加密的密码。这些密码可由账号、加密密码等关键信息重新计算得到。
密码生成器
网上有许多MD5网站可以直接用。
我自己用go语言写了个命令行程序,因为go可以直接生成可执行文件。这个程序完成了MD5计算、密文截取等简单功能。
demo