我正在尝试使用PBKDF2和来自CryptoJS的salt哈希来存储密码。这是我从注册中散列用户密码的部分:
var passwordInput = document.getElementById("txtPasswordInput").value;
var salt = CryptoJS.lib.WordArray.random(128/8);
var key512Bits1000Iterations = CryptoJS.PBKDF2(passwordInput, salt, { keySize: 512/32, iterations: 1000 });
console.log(salt.toString());
console.log(key512Bits1000Iterations.toString());
使用abcd1234作为密码,我设法将它们存储到数据库中:
Salt: cec16a7e68e0f3e49f729dfd90b0893a
Password: d974b96a494f39aec7f1fa6c495b4783b43e579c070b695...
在我的登录页面上,我试图根据用户输入来再次计算哈希值以验证凭据:
var passwordInput = document.getElementById("txtPassword").value;
// retrieve from firebase
var password = accountData.password;
var salt = accountData.salt;
var key512Bits1000Iterations = CryptoJS.PBKDF2(passwordInput, salt, { keySize: 512/32, iterations: 1000 });
console.log(salt.toString());
console.log(key512Bits1000Iterations.toString());
if(password != key512Bits1000Iterations){
console.log('wrong');
}else{
console.log('correct');
}
但是,它总是让我“错”。我打印了散列的密码,但是两者都不同。
同样,在按下注册或登录按钮之后,在我的浏览器再次返回响应之前,散列算法实际上需要花费一些时间进行计算。该算法设计为计算速度较慢吗?任何想法如何克服这个?
有任何想法吗?谢谢!
最佳答案
在登录页面上,salt需要解析为十六进制。
是的,PBKDF2设计得很慢。您可以通过减少迭代次数来加快速度,但会牺牲安全性。
关于javascript - CryptoJS PBKDF2和盐哈希方法不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46251506/