CryptoJS PBKDF2和salt哈希方法不起作用

时间:2017-09-16 07:45:45

标签: javascript hash salt cryptojs

我正在尝试使用来自CryptoJS的PBKDF2和盐哈希来存储我的密码。这是我从注册中哈希用户密码的部分:

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');
}

然而,它一直让我'错了'。我打印出了哈希密码,但两者都不同。

此外,在我按下注册表或登录按钮后,哈希算法实际上需要一段时间来计算,然后我的浏览器再次返回响应。算法设计的计算速度慢吗?任何想法如何克服这个?

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

在登录页面上,需要将salt解析为十六进制。

是的,PBKDF2的设计很慢。您可以以更少的迭代速度加快安全性。