【问题标题】:How to use hash_hmac function in node js如何在节点js中使用hash_hmac函数
【发布时间】:2018-09-03 10:45:24
【问题描述】:

最近我在 PHP 上使用了相同的代码,它运行良好,但是当我尝试 Node Js 时,它不适合我。请检查一次:

PHP

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

节点代码:

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

请检查这段代码有什么问题。

【问题讨论】:

    标签: php node.js md5 cryptojs


    【解决方案1】:

    你的第二行有两个错误:

    1. PHP APIKey 是 BASE64_DECODE(APIKey) 而在 Node.js 代码中它只是 APIKey
    2. PHP hmacsignature 是 BASE64(HEX(HMAC)) 而在 Node.js 代码中是 BASE64(BASE64(HMAC))

    试试这个:

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

    【讨论】:

    • 我已经尝试过你的代码,但它没有给我与 PHP 相同的响应
    • @PriteshMahajan 检查更新的代码,如果它们不匹配,请分享不同的值。
    • 请检查我上面的代码: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/…
    • PHP 的 urlencode 和 Node.js 的 encodeURI 的行为是不同的。使用类似locutus.io/php/url/urlencode
    猜你喜欢
    • 2018-02-18
    • 1970-01-01
    • 2020-02-01
    • 2021-08-21
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多