ss64.com 上有两个密码生成器:
他们是如何工作的
我制作了它们的独立版本,加上原始 HTML/Javascript 版本的副本,如果你想研究它们,但这里是它们的工作原理:
本节介绍密码生成器的工作原理,以便可以推出不依赖第三方网站的独立版本。
- 你有一个主密码,比方说
foo
- 您为特定站点或服务生成密码,比方说
stackexchange
您计算字符串的 SHA1 总和(标准版本)或 SHA256 总和(强版本)
foo:stackexchange
。$ echo -n "foo:stackexchange" | sha1sum #standard version b99341502484edbc43ec35a5f94be8e5de7ca53a *- $ echo -n "foo:stackexchange" | sha256sum #strong version c6ac66fdb639821bcc322f186fb1214d241f35ba2a91cb660daf0a284ac19a47 *-
您对字节序列应用 Base64 转换,其十六进制表示是先前生成的校验和:
$ printf "\xb9\x93\x41\x50\x24\x84\xed\xbc\x43\xec\x35\xa5\xf9\x4b\xe8\xe5\xde\x7c\xa5\x3a" | base64 uZNBUCSE7bxD7DWl+Uvo5d58pTo= $ printf "\xc6\xac\x66\xfd\xb6\x39\x82\x1b\xcc\x32\x2f\x18\x6f\xb1\x21\x4d\x24\x1f\x35\xba\x2a\x91\xcb\x66\x0d\xaf\x0a\x28\x4a\xc1\x9a\x47" | base64 xqxm/bY5ghvMMi8Yb7EhTSQfNboqkctmDa8KKErBmkc=
(强版本)您将 + 替换为 E 和 / 替换为 a,并取前 20 个字符
- (标准版)您取前 8 个字符,然后
1a
在密码末尾添加以确保至少有一个数字和一个字母
因此,使用主密码foo
,并且对于特定站点stackexchange
,标准生成密码是uZNBACSE1a
,强生成密码是xqxmabY5ghvMMi8Yb7Eh
。
现在的问题
- 强版真的比标准版强吗?如果标准版也使用 SHA256 会不会更强大?
- 如果我选择一个好的主密钥(不是 foo,而不是 10 个以上的随机字符),我使用这些生成的密码是否相当安全?
- 这种创建密码的方法还有哪些其他缺点?