【问题标题】:Wrong HMAC using PHP 5.0.4使用 PHP 5.0.4 的 HMAC 错误
【发布时间】:2017-01-09 13:29:15
【问题描述】:

我正在尝试使用 PHP 5.0.4 启用 HMAC 哈希 (SHA256) 并使用 phpseclib(据我所知,在这种情况下 phpseclib 依赖于原生 PHP 规范),我使用的示例代码非常简单:


    include('Crypt/Hash.php');

    $hash = new Crypt_Hash('sha256');
    $hash->setKey('abcdefg');
    echo bin2hex($hash->hash('something'));

它使用这个字符串生成一个 HMAC:

e678e33c727ddf7172d3521cf9c0c2a15b66e03eb96d77795fa4adb338dc24a9

但显然,这个字符串是无效的,因为用这个在线工具做同样的事情:

http://www.freeformatter.com/hmac-generator.html

http://beautifytools.com/hmac-generator.php

http://www.jetcityorange.com/hmac/

我得到这个字符串:

9a43ff294bdfed399e2d5a3d739a4efb7eccc23269b80b3f0d855937d35ae06f

我做错了什么?

注意:SHA1 编码可以完美运行。

提前致谢。

【问题讨论】:

  • 很确定 PHP 在 5.1.X 中添加了原生 HMAC 支持,你能更新 PHP 吗?
  • 9a43ff294bdfed399e2d5a3d739a4efb7eccc23269b80b3f0d855937d35ae06f 是正确的哈希值。部分问题是将选项作为字符串传递,任何字符串都会通过语法检查。
  • 我在 PHP 5.0.5 上试了一下,得到了9a43ff29 字符串。 Crypt_Hash 具有三种不同的模式:mhash、hash 和 internal。 mhash 和 internal 在 PHP 5.0 上可用。当我尝试它时,使用了内部模式。也许您的服务器安装了 mhash?你能发布你的 phpinfo() 输出吗?
  • @iamgory 我知道了,但是我不能更新 PHP 版本,还是谢谢
  • @neubert 不,我没有安装 mhash。 phpinfo() 输出中没有引用任何 hash 或 crypt 包。

标签: php hash sha256 hmac phpseclib


【解决方案1】:

这是一个与 PHP 5.3 之前的 32 位 Linux 上的浮点到整数转换有关的问题。 phpseclib 的开发者修复了 1.0.4 和 2.0.4 版本的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-15
    • 2017-06-27
    • 2020-07-09
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    相关资源
    最近更新 更多