PHP hash_pbkdf2到javascript

时间:2017-12-04 02:50:07

标签: javascript php node.js

我试图将 hash_pbkdf2 of PHP 转换为javascript,但是他们的输出并不完全相同,我使用了javascript的 crypto.pbkdf2Sync( nodejs)为此。

对于此示例,我使用的密码是:" 密码"

PHP:

$iv = hash_pbkdf2("sha256", $password, strlen($password), 1000, 16);
echo "iv: " . $iv . "<br />";
echo "iv length: " . strlen($iv);
  

输出
iv :4cf7620724f7b273
   iv length: 16


使用Javascript:

var iv = crypto.pbkdf2Sync(password, password.length.toString(), 1000, 16, 'sha256');
console.log(iv.toString('hex'));
console.log(iv.length);
  

输出
iv :4cf7620724f7b27347b7765889cf27e1
   iv length: 16

这非常令人困惑,因为javascript&p; pbkdf2的输出较长(但你可以看到前16个字母是相同的),但它们的长度是相同的!我错过了什么吗?

注意: 我无法调整PHP代码(因为这是他们正在使用的内容),我只能调整我的javascript代码(以适应它们)

1 个答案:

答案 0 :(得分:0)

hash_pbkdf2()的第五个参数是$length(在您的示例中为16),但它计入十六进制字符,而不是字节。要在Javascript中重现该结果,请传递长度为8,或在.toString("hex")之后将输出修剪为16个字符。