我正在尝试让 Node.JS Crypto PBKDF2 与 PHP Crypto PBKDF2 匹配相同的值。由于某种原因,它不一样。
在 JavaScript 中
const crypto = require('crypto');
crypto.pbkdf2('secret', 'salt', 100000, 20, 'sha512', (err, key) => {
console.log(key.toString());
});
输出:7E������]�9��J]�i
在 PHP 中
$password = "secret";
$iterations = 100000;
$salt = "salt";
$hash = hash_pbkdf2("sha512", $password, $salt, $iterations, 20);
echo $hash;
输出:3745e482c6e0ade35da1
为什么 JS 输出与 PHP 不匹配?
最佳答案
您可以使用hash_pbkdf2的选项raw_output PHP中的方法并比较它们的base64
在 PHP 中
<?php
$password = "secret";
$iterations = 100000;
$salt = "salt";
$hash = hash_pbkdf2("sha512", $password, $salt, $iterations, 20, true);
echo base64_encode($hash);
?>
在 NodeJS 中
const crypto = require('crypto');
crypto.pbkdf2('secret', 'salt', 100000, 20, 'sha512', (err, key) => {
console.log(new Buffer(key).toString('base64'));
});
关于javascript - PHP 和 Node.JS - 加密 PBKDF2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38571671/