如何在节点js中使用hash_hmac函数

最近我在PHP上使用了相同的代码并且工作正常但是当我尝试Node Js时,它对我不起作用 。 请检查一次:</ p>

PHP </ p>

  $ signature = $ ACCID。  “POST”。 用strtolower(用urlencode($网址))$ requestContentBase64String。

$ hmacsignature = base64_encode(hash_hmac(“sha256”,$ signature,base64_decode($ APIKey),true));

</ code> </ pre>

NODE CODE:</ p>

  var signature = ACCID +“POST”+ encodeURI(url).toLowerCase()  + requestContentBase64String;

var hmacsignature = base64.encode(crypto.createHmac('sha256',APIKey).update(signature).digest('base64'))
</ code> </ pre>

请检查 这段代码有什么问题。 </ p>
</ div>

展开原文

原文

Recently I have used same code on PHP and it's working fine but when I tried Node Js, it's not working for me. Please check once:

PHP

$signature = $ACCID . "POST" . strtolower(urlencode($url)).$requestContentBase64String; 
$hmacsignature = base64_encode(hash_hmac("sha256", $signature, base64_decode($APIKey), true)); 

NODE CODE :

var signature = ACCID+"POST"+encodeURI(url).toLowerCase()+requestContentBase64String; 
var hmacsignature = base64.encode(crypto.createHmac('sha256', APIKey).update(signature).digest('base64'))

Please check what's wrong in this code.

1个回答



你的第二行有两个错误:</ p>


  1. PHP APIKey是 BASE64_DECODE(APIKey)</ code>在Node.js代码中它只是 APIKey </ code> </ li>
  2. PHP hmacsignature是 BASE64(HEX(HMAC))</ 代码>在Node.js代码中它是 BASE64(BASE64(HMAC))</ code> </ li>
    </ ol>

    试试这个:</ p>

      var hmacsignature = crypto.createHmac('sha256',Buffer.from(APIKey,'base64'))。update(signature).digest('base64')
    </ code> </ pre>
    </ div>

展开原文

原文

Your second line has two mistakes:

  1. PHP APIKey is BASE64_DECODE(APIKey) while in Node.js code it is just APIKey
  2. PHP hmacsignature is BASE64(HEX(HMAC)) while in Node.js code it is BASE64(BASE64(HMAC))

Try this:

var hmacsignature = crypto.createHmac('sha256', Buffer.from(APIKey, 'base64')).update(signature).digest('base64')

dougang1965
dougang1965 PHP的urlencode和Node.js的encodeURI的行为是不同的。 使用像locutus.io/php/url/urlencode这样的东西
大约 2 年之前 回复
dqndc26628
dqndc26628 是的但没有得到确切的PHP字符串
大约 2 年之前 回复
donglengli0644
donglengli0644 你有没有尝试更新的答案? @PriteshMahajan
大约 2 年之前 回复
donk68254
donk68254 请检查我的上述代码:var md5 = require('md5'); var requestArray = [{“fname”:“mobilenumber”,“fvalue”:'1234568970'},{“fname”:“phone”,“fvalue”:'000000000'}]; var post_data = JSON.stringify(requestArray); var m = md5(post_data); var requestContentBase64String = base64.encode(m); stackoverflow.com/questions/52128825/make-md5-raw-in-javascript/...
大约 2 年之前 回复
doulu2591
doulu2591 检查更新的代码,如果它们不匹配,请分享不同的值。
大约 2 年之前 回复
dpo60833
dpo60833 我已经尝试过你的代码,但它没有像PHP那样给我相同的响应
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问