Какие-нибудь примеры или библиотеки для того, чтобы охарактеризовать HMAC-SHA1 в Эрланге?Erlang вычисляет пример HMAC-SHA1?
Я пробовал Crypto Module, но, похоже, точно не соответствует. Любые примеры?
Какие-нибудь примеры или библиотеки для того, чтобы охарактеризовать HMAC-SHA1 в Эрланге?Erlang вычисляет пример HMAC-SHA1?
Я пробовал Crypto Module, но, похоже, точно не соответствует. Любые примеры?
Чтобы расширить предыдущий ответ, вот модуль 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"
Функция sha_mac в модуле криптографической является HMAC-SHA1:
http://www.erlang.org/doc/man/crypto.html#sha_mac-2
Причина может не совпадать, потому что вы, вероятно, сравнивая его с «hexdigest», а не сырые данные переваривать ,
Проблема решена. Эрланг был прав, и библиотеки C, которые я использовал, ошибочны. – barata7
string:to_lower(lists:flatten([[integer_to_list(N, 16) || <<N:4>> <= crypto:sha_mac("hello", "world")]])).
Пожалуйста, объясните. Одна строка кода не считается достаточной в качестве ответа. –
crypto: sha_mac/2 устарел, заменен на крипто: hmac/3. Вы лучше этого: '<< Mac: 160/integer >> = crypto: hmac (sha, <<"hello">>, <<"world">>).' – Berzemus
Этот интерфейс не существовал в 2010 году, когда этот ответ был написан. Я считаю, что этот API был добавлен совсем недавно в выпуске R16. Вы можете предложить редактировать. –