【问题标题】:Cannot reproduce sha512 hmac from PHP in node.js无法在 node.js 中从 PHP 重现 sha512 hmac
【发布时间】:2015-05-28 14:04:24
【问题描述】:

我有一些 PHP 代码会产生如下的 hmac:

<?php
$secret = "7pgj8Dm6";
$message = "Test\0Message";
echo base64_encode(hash_hmac('sha512', $message, base64_decode($secret), true))."\n";
echo "69H45OZkKcmR9LOszbajUUPGkGT8IqasGPAWqW/1stGC2Mex2qhIB6aDbuoy7eGfMsaZiU8Y0lO mQxlsWNPrw==\n";
?>

当我尝试在 node.js 中生成类似的代码时,我得到的 base64 编码结果与我想要的不同,我不知道为什么。

var hmac = function(msg, secret){
  var s = (new Buffer(secret, 'base64')).toString('utf8');
  var hmac = require('crypto').createHmac('sha512',s);
  hmac.update(msg);
  return hmac.digest('base64');
};

var secret = "7pgj8Dm6";
var message = "Test\0Message";
var wanted = "69H45OZkKcmR9LOszbajUUPGkGT8IqasGPAWqW/1stGC2Mex2qhIB6aDbuoy7eGfMsaZiU8Y0lO3mQxlsWNPrw==";
var got = hmac(message, secret);
if(wanted === got){
  console.log('All is fine.');
}else{
  console.log('Hash is wrong :(');
}
console.log('wanted:\t'+wanted);
console.log('got:\t'+got);

我的动机是 anxpro api,我想玩一下。

【问题讨论】:

  • 您可以使用节点加密 API。见stackoverflow.com/questions/7480158/…
  • 我完全看错了你的帖子,对不起。 :/ 你可以删除你的评论,我会删除我的以保持你的帖子干净。

标签: node.js hmac


【解决方案1】:

好的,我想通了。问题是我在hmac 函数中创建的Buffer 上调用toString。当我删除它时,一切正常。

var hmac = function(msg, secret){
  var s = new Buffer(secret, 'base64');
  var hmac = require('crypto').createHmac('sha512',s);
  hmac.update(msg);
  return hmac.digest('base64');
};

【讨论】:

    猜你喜欢
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多