2010-11-16 5 views
9

Какие-нибудь примеры или библиотеки для того, чтобы охарактеризовать HMAC-SHA1 в Эрланге?Erlang вычисляет пример HMAC-SHA1?

Я пробовал Crypto Module, но, похоже, точно не соответствует. Любые примеры?

ответ

19

Чтобы расширить предыдущий ответ, вот модуль HMAC в Python с использованием алгоритма SHA-1 с ключом «привет» и сообщение «мира»:

>>> 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 устарел, заменен на крипто: hmac/3. Вы лучше этого: '<< Mac: 160/integer >> = crypto: hmac (sha, <<"hello">>, <<"world">>).' – Berzemus

+1

Этот интерфейс не существовал в 2010 году, когда этот ответ был написан. Я считаю, что этот API был добавлен совсем недавно в выпуске R16. Вы можете предложить редактировать. –

1

Функция sha_mac в модуле криптографической является HMAC-SHA1:

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

Причина может не совпадать, потому что вы, вероятно, сравнивая его с «hexdigest», а не сырые данные переваривать ,

+1

Проблема решена. Эрланг был прав, и библиотеки C, которые я использовал, ошибочны. – barata7

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

Пожалуйста, объясните. Одна строка кода не считается достаточной в качестве ответа. –

Смежные вопросы