【问题标题】:NodeJS crypto.createHmac SHA512 not working as expectedNodeJS crypto.createHmac SHA512 未按预期工作
【发布时间】:2017-01-05 11:18:43
【问题描述】:

我正在尝试在 API 请求中实现身份验证,但在签署数据时遇到了奇怪的问题。 NodeJS 中 crypto.createHmac 的输出与 PHP 中 hash_hmac 的输出不同。我正在尝试在 PHP 上实现这一点,而 NodeJs 的响应正是我所期望的。

NodeJS 代码

var crypto = require('crypto');
var hmac = crypto.createHmac('sha512', new Buffer(key, 'base64'));
var digest = hmac.update(salt + '\n' + returnUrl).digest();
var signature = digest.toString('base64');
console.log(signature);

PHP 代码

$signature = base64_encode(hash_hmac("sha512",$salt.'\n'.$returnUrl, $key));
echo $signature;

对于我得到的 NodeJS 应用程序

VZ+gH+BVdZl6GIILfN5TFAxEIUqstiD5YwuQYTdk3R4LSxVzsAXPpPpn5MwHDoRllz5ll5iBpAOuO2DQ9nvtGA==

这是预期的响应,但 PHP 给了我不同的结果

NzNlNmFhNWUwOTg2OGQ3NzdhNjU0MWZmOTZhZDZjYmFiYjE4ZjMxZTc5OTk3MDI5ZGI1M2M3YmU3MjRiYTdiNjJmODM4NDA1NmMzNWZlOWE2NTVkZjhmZTg4MDg0MjA3ZmYzMjg1MGQxYzFiZDNkODA2M2MzZGVhOTRiZWMzNTA=

这与预期完全不同。有没有办法可以在 PHP 中重新创建 NodeJS 加密功能并获得相同的响应。

【问题讨论】:

    标签: php node.js azure


    【解决方案1】:

    在下面的示例中,我使用 node.js 和 PHP 来获取签名数据,它们都得到相同的输出。你可以参考一下。

    Node.js 代码

    var crypto = require('crypto');
    var hmac = crypto.createHmac('sha512', 'sharedpassword');
    var digest = hmac.update('12345\nhttps://google.com').digest('hex');
    var signature = new Buffer(digest).toString('base64');
    console.log(signature);
    

    然后我得到:

    OTllY2U2NTU4ZWVkYzczZmNlMTQ2YzdlMmI4NjI5MTdhODRhYWNmOGEyNmYzM2M5ZjQ5ZjE1NTM5MjQ1ZDAzYWU1MzlkYTViODY4MjcwM2UyMTA5MjVhMzcyNWJhOWU3OTU3MjY5NWI4ZjkzZGY1Zjg1NTNmYzI3MWU0ZTIyZWE=
    

    PHP 代码

    $signature = base64_encode(hash_hmac('sha512', "12345\nhttps://google.com", 'sharedpassword'));
    echo $signature;
    

    得到:

    OTllY2U2NTU4ZWVkYzczZmNlMTQ2YzdlMmI4NjI5MTdhODRhYWNmOGEyNmYzM2M5ZjQ5ZjE1NTM5MjQ1ZDAzYWU1MzlkYTViODY4MjcwM2UyMTA5MjVhMzcyNWJhOWU3OTU3MjY5NWI4ZjkzZGY1Zjg1NTNmYzI3MWU0ZTIyZWE=
    

    另请注意,PHP 仅在双引号 (") 中解释转义字符。所以\n必须用双引号!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 2021-06-04
      相关资源
      最近更新 更多