PHP 和 Lua 中的 HMAC_SHA1 不同

我正在尝试在PHP中生成HMAC_SHA1,并在openresty lua中验证它。

PHP 代码:

$hmac_sha1 = hash_hmac('sha1', 'test', 'gabri', true);
echo base64_encode($hmac_sha1);

这将产生:

/ReAJgDe67/lF3BNbaGSCx70J/c=

相同的代码在lua中:

local hmac_sha1 = ngx.hmac_sha1("test", "gabri")
ngx.log(ngx.NOTICE,  ngx.encode_base64(hmac_sha1) );

产生:

Yczcenrc2EAOpfm9UEWwME9XLRI=

它们为什么不同?

在PHP中,我已包含了hash_hmac的第四个参数,这会将数据作为原始二进制返回。

如下所示: https://github.com/openresty/lua-nginx-module#ngxhmac_sha1

将生成HMAC-SHA1摘要的原始二进制形式。 在需要时使用ngx.encode_base64将结果编码为文本表示形式。

点赞
用户2328287
用户2328287

根据文档

string hash_hmac(string $algo, string $data, string $key [, bool $raw_output = false]) digest = ngx.hmac_sha1(secret_key, str)

因此,在 hash_hmac('sha1', 'test', 'gabri', true); 中,test 是数据,gabri 是密钥。 但在 ngx.hmac_sha1("test", "gabri") 中,gabri 是数据,test 是密钥。

2017-06-23 12:07:30