【问题标题】:HMAC-MD5 signature - translate key from hex to byte format phpHMAC-MD5 签名 - 将密钥从十六进制转换为字节格式 php
【发布时间】:2013-07-11 11:19:10
【问题描述】:

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

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

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

说明如下:

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

  2. 根据商家的 HMAC 使用 HMAC-MD5 程序对字符串进行签名 key - 这点没问题

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

我已经尝试在步骤 1 中使用它)$key2 = pack("H*" , $key) 这适用于第 2 步) bin2hex ( $sign ),它不能按预期工作。

我发现唯一能生成正确符号的在线 HMAC-MD5 生成器在这里: http://membres.multimania.fr/brudav/hash.php选中“Hexa”。不过,我显然不知道这是怎么解决的。

谁能给我一些建议?

【问题讨论】:

  • hash_hmac 不生成密钥。它对输入数据进行哈希处理,默认情况下将输出作为十六进制字符串返回。使用raw_output 参数获取二进制输出。 -- 显示您的代码以及结果与预期输出的不同之处。

标签: php hex byte


【解决方案1】:
$hmac = hash_hmac('md5', $data, hex2bin($key));

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

  • hex2bin 将密钥从十六进制格式转换为二进制格式(步骤 1),这是 hash_hmac 所期望的。您尝试使用 pack 的方法也应该适用于此目的。
  • hash_hmac 和默认的 $raw_output = false 将产生一个十六进制输出(步骤 2 和 3 相结合)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 2014-12-18
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多