gpt4 book ai didi

node.js - 无法在 Node.js 中从 PHP 重现 sha512 hmac

转载 作者:太空宇宙 更新时间:2023-11-04 00:54:45 24 4
gpt4 key购买 nike

我有一些生成 hmac 的 PHP 代码,如下所示:

<?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 ,我想玩一下。

最佳答案

好吧,我明白了。问题是我在 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');
};

关于node.js - 无法在 Node.js 中从 PHP 重现 sha512 hmac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30508889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com