Erlang计算HMAC-SHA1的例子?

时间:2010-11-16 11:13:45

标签: erlang sha1 hmac

在Erlang中计算HMAC-SHA1的库的任何示例?

我试过加密模块,但显然不完全匹配。有什么例子吗?

3 个答案:

答案 0 :(得分:20)

为了扩展上一个答案,这里是Python中的hmac模块,它使用SHA-1算法,键为'hello',消息为'world':

>>> import hashlib
>>> import hmac
>>> hmac.HMAC(key='hello', msg='world', digestmod=hashlib.sha1).hexdigest()
'8a3a84bcd0d0065e97f175d370447c7d02e00973'

这是Erlang中的等价物。我会使用一种更有效的方法将二进制MAC转换为典型代码中的十六进制摘要,但为了简洁起见我使用了这个:

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"

答案 1 :(得分:1)

加密模块中的sha_mac函数是HMAC-SHA1:

http://www.erlang.org/doc/man/crypto.html#sha_mac-2

它可能不匹配的原因是因为您可能将其与“hexdigest”进行比较,而不是原始摘要数据。

答案 2 :(得分:0)

string:to_lower(lists:flatten([[integer_to_list(N, 16) || <<N:4>> <= crypto:sha_mac("hello", "world")]])).