2010-11-16 31 views

Répondre

19

Pour développer la réponse précédente, voici le module HMAC en Python en utilisant l'algorithme SHA-1 algorithme avec la touche « bonjour » et le message « monde »:

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

Voici l'équivalent en Erlang. J'utiliser une méthode plus efficace pour convertir le MAC binaire à un digest hexagonal dans le code typique, mais je celui-ci pour la brièveté:

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 est déprécié, remplacé par crypto: hmac/3 Vous êtes mieux de cette façon: '<< Mac: 160/entier >> = crypto: hmac (sha, <<"hello">>, <<"world">>).' – Berzemus

+1

Cette interface n'existait pas en 2010, lorsque cette réponse a été écrite. Je crois que cette API a été ajoutée assez récemment dans une version R16. Vous êtes invités à proposer une modification. –

1

La fonction sha_mac dans le module Crypto est HMAC-SHA1:

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

La raison pour laquelle il pourrait ne pas correspondre parce que vous comparez probablement à un « hexdigest », pas les données digest brutes .

+1

Problème résolu. L'Erlang était correct et les bibliothèques C que j'utilisais étaient fausses. – barata7

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

S'il vous plaît expliquer. Une seule ligne de code n'est pas considérée comme une réponse suffisante. –