将nodej中的hash_hmac秘密密钥转换为等效的php代码

时间:2020-10-03 01:32:59

标签: php node.js

我有一个想要在php中做的nodejs示例


    var nonce = new Date().getTime();
        
    var postdata = postdata || {};
    postdata.nonce = nonce;
        
    var stringmessage = JSON.stringify(postdata);
    var signedMessage = new hmac("sha512", self.secret);
        
    signedMessage.update(stringmessage);
        
    var sign = signedMessage.digest('hex');

所以我能做到的代码就是这样

    $data['nounce'] = time();
    $dataJson = json_encode($data);

    $sign = dechex(hash_hmac('sha512', $data ,$this->getSecret()));

但是如果我尝试连接到此,则在尝试连接时会收到此消息

Warning: file_get_contents(https://www.example.com.au/api/quote/buy): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized

所以我假设这是连接到哈希值不正确。

1 个答案:

答案 0 :(得分:0)

要更改的三件事应该起作用:

  1. 在JavaScript中,您使用“ nonce”,但在PHP中,您使用“ nounce”
  2. 在您的PHP hash_hmac中,您传递了$ data作为第二个参数,但您应该传递$ dataJson
  3. 您不需要dechex,hash_hmac来自https://www.php.net/manual/en/function.hash-hmac.php
  4. “以小写的十六进制形式返回包含计算的消息摘要的字符串,除非raw_output设置为true”。