HMAC_SHA1在PHP和Lua上有所不同

时间:2017-06-23 11:39:34

标签: php lua hmacsha1

我正在尝试在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中包含了第4个参数,它将数据作为原始二进制文件返回

按照: https://github.com/openresty/lua-nginx-module#ngxhmac_sha1

  

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

1 个答案:

答案 0 :(得分:0)

根据文件

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是关键