2017-06-23 5 views
1

Je suis en train de générer un HMAC_SHA1 en php, et de valider dans openresty luaHMAC_SHA1 diffèrent sur PHP et Lua

Code PHP:

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

qui produit:

/ReAJgDe67/lF3BNbaGSCx70J/c= 

Et le même code dans lua:

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

produit:

Yczcenrc2EAOpfm9UEWwME9XLRI= 

Pourquoi sont-ils différents?

En PHP, j'ai inclus le 4ème paramètre sur hash_hmac, qui renvoient les données binaires brutes

Comme par: https://github.com/openresty/lua-nginx-module#ngxhmac_sha1

La forme binaire brute du HMAC-SHA1 Pour générer, utilisez ngx.encode_base64, par exemple, pour encoder le résultat en une représentation textuelle si vous le souhaitez.

+0

un Suspect de cette fonction renvoie la valeur sous forme de chaîne binaire et une sous forme de chaîne hexagonale. – moteus

+0

On dirait que PHP est erroné, selon la documentation nginx, _local key = "thisisverysecretstuff" _ _local src = "une chaîne que nous voulons signer" _ _local digest = ngx.hmac_sha1 (clé, src) _ _ngx. dire (ngx.encode_base64 (digest)) _ cède la sortie _R/pvxzHC4NLtj7S + kXFg/NePTmk = _ - Mais en PHP: _ $ key = "thisisverysecretstuff"; _ _ $ src = " une chaîne que nous voulons signer "; _ _ $ digest = hash_hmac ('sha1', $ clé, $ src, true); _ _echo base64_encode ($ digest); _ donne _y2h0PgNY9Xfil5xe6wCXLhTcPZI = _ –

+0

$ digest = hash_hmac ('sha1', $ src, $ key, true); – moteus

Répondre

0

Selon docs

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

Ainsi, dans hash_hmac('sha1', 'test', 'gabri', true);test sont des données et gabri est la clé. Mais dans ngx.hmac_sha1("test", "gabri")gabri sont des données et test est la clé