使用 PHP 5.0.4 的 HMAC 错误

Wrong HMAC using PHP 5.0.4

我正在尝试使用 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 编码完美无缺。

提前致谢。

这是一个与 32 位 Linux pre-PHP 5.3 上的 float 到 int 转换相关的问题。 phpseclib 的开发人员在 1.0.4 和 2.0.4

版本上修复了这个问题