通过 sha512
将可记忆的密码不可逆的转换成可安全使用的密码。
你可以在 https://longhao-chen.github.io/password-converter/ 尝试此程序。
很多网站或程序都需要一个账号,而每一个账号都需要一个密码。如果保持所有账号的密码都一致或使用同一种模式,那么只需要有一个账号的密码发生泄漏就会影响的所有账号的安全;如果每个账号都使用不同密码,这样就会造成记忆的困难。于是就出现了一些密码管理程序,这些程序的核心就是将你的密码保存下来,需要时再显示。但这也会出现一些问题,例如:如果我想在公共计算机上登录我的帐号,这就很不方便了。
这个程序通过散列函数,让我们能够安全的使用有便于记忆的密码来设置不同账号的密码。产生密码所需的信息完全可以记在大脑里,这样就可以很方便的在任意的设备上登录你的帐号而不用担心密码泄露的问题。
首先我们需要选择一个基本密码,这个需要严格保密,
且建议不要包含生日、姓名等信息。
例如可以使用 Javascript.node
,作为基本密码。
接着,我们需要为每一个网站想一个原密码(转换之前的密码)。
例如,对于每一个网站或程序,我们就可以把 基本密码+网站或程序名
作为此网站或程序的原密码。
在上述例子中,Github的原密码为 Javascript.node+Github
。
然后把这个原密码输入 密码生成器 中,将生成的密码作为此网站或应用程序的密码。
这样就可以保证每个网站的密码不同,而且由于算法的不可逆性,就算有一些密码被泄露了,攻击者也无法推出原密码从而得到其他网站或应用密码。 当然,上述原密码生成方案仅供参考,你完全可以自己设计一套原密码生成的方案。
键盘事件 | 操作 |
---|---|
Enter | 复制生成的密码 |
Ctrl + C | 复制生成的密码 |
Ctrl + Backspace | 清除密码 |
Alt + I | 输入密码可见性切换 |
Alt + O | 生成的密码可见性切换 |
Ctrl + Delete | 覆盖剪切板20次 |
程序的源代码全部都是公开的,任何人都可以查看,所用的散列算法为 sha512
。
程序所有的操作均在本地浏览器上进行,不会有任何数据会被发送到网络上。
密码生成的算法如下:
function sha512(input) {
return crypto.createHash('sha512').update(input).digest('base64');
}
function Password(input) {
var pass = input;
//增加暴力破解的计算量,总共计算50次sha512
for (var i = 0; i < 50; ++i) {
pass = sha512(input + pass + input);
}
//加入特殊字符,因为某些网站要求密码中要包含特殊字符
pass = pass.slice(0, 4) + ':' + pass.slice(4, 8) + '$' + pass.slice(8, 12);
return pass;
}