在 php 中使用 SHA256 hmac 生成散列消息(密钥和消息是假的)

Generate a hashed message with SHA256 hmac in php (key & msg are fake)

我正在使用 php 8.0.11,我必须生成一个 SHA256 加密 messagesignature.When 我在 postman 中测试 API 在它给出的预请求脚本中使用 javascipt 代码正确的加密消息签名,当我在 php 中测试它时,我将脚本转换为 php 它发送了一个不同的错误加密消息签名(密钥和消息是假的):

javascript代码(邮递员中的预请求脚本):

      let msg='mymessage'
      const hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256,"myapipkey");
      hmac.update(msg);
      const messageSignature = hmac.finalize().toString();
      pm.globals.set("messageSignature",messageSignature);
      console.log('messageSi:',pm.globals.get('messageSignature'))

````
php code:
````php

    $data_to_hash = "mymessage";
    $data_hmac=hash('sha256',  $data_to_hash);
    $ctx = hash_init('sha256', HASH_HMAC, 'myapipkey');
    hash_update($ctx, $data_hmac);
    $result = hash_final($ctx);
    echo $result;

````

对 PHP 代码的简单更改应该会给出正确的结果。

您似乎进行了两次哈希运算(或类似的运算!)

$data_to_hash = "mymessage";
$ctx = hash_init('sha256', HASH_HMAC, 'myapipkey');
hash_update($ctx, $data_to_hash);
$result = hash_final($ctx);
echo $result;

无论如何,以上代码的输出将是:

898786a1fa80da9b463c1c7c9045377451c40cf3684cbba73bdfee48cd3a5b8f

这与 JavaScript 代码相同,都匹配此处给出的输出:

https://codebeautify.org/hmac-generator

算法 = 'SHA256',密钥 = 'myapipkey',明文 = 'mymessage'。