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.
un Suspect de cette fonction renvoie la valeur sous forme de chaîne binaire et une sous forme de chaîne hexagonale. – moteus
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 = _ –
$ digest = hash_hmac ('sha1', $ src, $ key, true); – moteus