【问题标题】:HMAC_SHA1 differ on PHP and LuaHMAC_SHA1 在 PHP 和 Lua 上有所不同
【发布时间】:2017-06-23 20:07:30
【问题描述】:

我正在尝试在 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,例如,将结果编码为文本 如果需要的话。

【问题讨论】:

  • 怀疑此函数之一返回值作为二进制字符串和一个作为十六进制字符串。
  • 看起来 PHP 是错误的,根据 nginx 文档,local key = "thisisverysecretstuff" local src = "some string we want to sign" local digest = ngx.hmac_sha1(key, src) ngx.say(ngx.encode_base64(digest)) 产生输出 R/pvxzHC4NLtj7S+kXFg/NePTmk= - 但在 PHP 中:$key = "thisisverysecretstuff"; $src = "some string we want to sign"; $digest = hash_hmac( 'sha1', $key, $src, true); echo base64_encode($digest); 产生 y2h0PgNY9Xfil5xe6wCXLhTcPZI=
  • $digest = hash_hmac('sha1', $src, $key, true);

标签: php lua hmacsha1


【解决方案1】:

根据文档

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 2011-11-03
    相关资源
    最近更新 更多