javascript - PHP 和 Node.JS - 加密 PBKDF2

标签 javascript php node.js

我正在尝试让 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);
?>

Live example

在 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/

相关文章:

javascript - 如何从 Outlook 网页版获取 GAL

javascript - Angular - 意外的标记 <

javascript - Vue.js - react 性组件,并不总是重新渲染

PHP __autoload 无法重新声明

javascript - 如何使用 localecompare 对包含负值的数字数组进行排序?

PHP make 如果更短

php - 显示我关注的用户的状态

javascript - Node.js 中的函数总是返回 undefined

javascript - IndexRoute 子路由

javascript - Vue.js props img src 绑定(bind) webpack 别名 (@)