我试图将 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代码(以适应它们)
答案 0 :(得分:0)
hash_pbkdf2()
的第五个参数是$length
(在您的示例中为16),但它计入十六进制字符,而不是字节。要在Javascript中重现该结果,请传递长度为8,或在.toString("hex")
之后将输出修剪为16个字符。