Erlang计算HMAC-SHA1示例?

11

有没有关于在 Erlang 中计算 HMAC-SHA1 的示例或库?

我尝试了 Crypto 模块,但显然并不完全匹配。有什么示例吗?

3个回答

22

在之前回答的基础上,以下是Python中使用SHA-1算法、密钥为'hello'和消息为'world'的hmac模块:

>>> 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
crypto:sha_mac/2已被弃用,替换为crypto:hmac/3。你最好这样做:<<Mac:160/integer>> = crypto:hmac(sha,<<"hello">>, <<"world">>). - Berzemus
1
当这个答案被写下来的时候,那个接口在2010年并不存在。我相信这个API是在最近的R16版本中添加的。欢迎您提出修改建议。 - YOUR ARGUMENT IS VALID

2

1
问题已解决。Erlang 的是正确的,我使用的 C 库是错误的。 - barata7

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

2
请解释。一行代码不被视为足够的答案。 - Lorenz Meyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接