2

我需要使用 HMAC-MD5 算法对一些发布数据进行数字签名。

我有密钥和一个示例字符串(我知道十六进制符号应该是什么。

我的问题是当我使用 hash_hmac php 函数时,它生成的密钥与它应该是不同的。

指令是:

  1. 将 HMAC 密钥从十六进制转换为字节格式 -不知道该怎么做

  2. 使用基于商家的 HMAC 密钥的 HMAC-MD5 程序对字符串进行签名 -这个位很好

  3. 将签名从字节转换为十六进制格式并将其作为值与参数符号相关联 -也不知道在这里做什么

我已经尝试将其用于步骤 1) $key2 = pack("H*" , $key) 并将其用于步骤 2) bin2hex ( $sign ),但不能按预期工作。

我发现唯一能产生正确符号的在线 HMAC-MD5 生成器在这里: http://membres.multimania.fr/brudav/hash.php选择“hexa”时。我显然不知道这是如何解决的。

谁能给我任何建议?

4

1 回答 1

2
$hmac = hash_hmac('md5', $data, hex2bin($key));

应该给出与在线计算器相同的答案。

  • hex2bin将密钥从十六进制格式转换为二进制格式(步骤 1),这是hash_hmac预期的。您尝试过的内容pack也应该适用于此目的。
  • hash_hmac,使用默认值$raw_output = false,将产生一个十六进制输出(步骤 2 和 3 结合)。
于 2013-07-14T00:34:38.763 回答