【发布时间】: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