Erlang calculating HMAC-SHA1 example? [closed]
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it开发者_开发百科 can be answered with facts and citations.
Closed 7 years ago.
Improve this questionAny examples or libraries to caculate HMAC-SHA1 in Erlang?
I tried Crypto Module, but apparently doesn't match exactly. Any examples?
To expand on the previous answer, here is the hmac module in Python using the SHA-1 algorithm with the key 'hello' and the message 'world':
>>> import hashlib
>>> import hmac
>>> hmac.HMAC(key='hello', msg='world', digestmod=hashlib.sha1).hexdigest()
'8a3a84bcd0d0065e97f175d370447c7d02e00973'
Here's the equivalent in Erlang. I'd use a more efficient method to convert the binary MAC to a hex digest in typical code, but I used this one for brevity:
1> crypto:start().
ok
2> <<Mac:160/integer>> = crypto:hmac(sha, <<"hello">>, <<"world">>).
<<138,58,132,188,208,208,6,94,151,241,117,211,112,68,124,
125,2,224,9,115>>
3> lists:flatten(io_lib:format("~40.16.0b", [Mac])).
"8a3a84bcd0d0065e97f175d370447c7d02e00973"
The sha_mac function in the crypto module is HMAC-SHA1:
http://www.erlang.org/doc/man/crypto.html#sha_mac-2
The reason it might not match is because you're probably comparing it to a "hexdigest", not the raw digest data.
string:to_lower(lists:flatten([[integer_to_list(N, 16) || <<N:4>> <= crypto:sha_mac("hello", "world")]])).
精彩评论