php - HMAC-MD5 签名 - 将 key 从十六进制转换为字节格式 php

标签 php hex byte

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

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

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

说明是:

  1. 将 HMAC key 从十六进制转换为字节格式 - 不确定如何执行

  2. 根据商户的HMAC,使用HMAC-MD5程序对字符串进行签名 关键 - 这一点很好

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

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

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

有人可以给我任何建议吗?

最佳答案

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

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

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

关于php - HMAC-MD5 签名 - 将 key 从十六进制转换为字节格式 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17622969/

相关文章:

php - 使用 DOMDocument 和 DOMXPath 正确删除 PHP 中的子元素

javascript - 如果数据由ajax填充,如何隐藏下拉列表

javascript - 下拉选择菜单以返回没有提交按钮的php变量

matlab - 将十六进制转换为单精度

c++ - 将十六进制数据发送到串行端口?

php - 返回用户 MySQL 关注的人的所有帖子

java - Java中如何将十六进制字节转换为Unicode

java - 在 Java 中将字符串转换为 ByteBuffer

c++ - 为什么我的编译器在 64 位机器上运行时使用 8 位字符?

java - 在一个字节内托管 Color.argb(a,r,g,b) 而不会丢失信息