2010-11-16 40 views
9

Bất kỳ ví dụ hoặc thư viện nào để tính toán HMAC-SHA1 trong Erlang?Erlang tính toán ví dụ HMAC-SHA1?

Tôi đã thử Mô-đun Crypto, nhưng dường như không khớp chính xác. Bất kỳ ví dụ nào?

Trả lời

19

Mở rộng trên câu trả lời trước, đây là mô-đun HMAC bằng Python sử dụng các thuật toán SHA-1 với phím 'hello' và thông báo 'thế giới':

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

Dưới đây là tương đương trong Erlang. Tôi muốn sử dụng một phương pháp hiệu quả hơn để chuyển đổi MAC nhị phân để một hex tiêu hóa trong mã điển hình, nhưng tôi đã sử dụng cái này cho ngắn gọn:

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

mật mã: sha_mac/2 không được dùng nữa, thay thế bằng mật mã: hmac/3 Bạn tốt hơn theo cách này: '<< Mac: 160/integer >> = crypto: hmac (sha, <<"hello">>, <<"world">>). ' – Berzemus

+1

Giao diện đó không tồn tại trong năm 2010, khi câu trả lời này được viết. Tôi tin rằng API này đã được thêm gần đây trong bản phát hành R16. Bạn được quyền đề xuất chỉnh sửa. –

1

Chức năng sha_mac trong module crypto là HMAC-SHA1:

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

Lý do nó có thể không phù hợp là bởi vì có lẽ bạn đang so sánh nó với một "hexdigest", không phải là nguyên tiêu hóa dữ liệu .

+1

Issue giải quyết. Erlang là đúng và các thư viện C tôi đang sử dụng là sai. – barata7

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

Vui lòng giải thích. Một dòng mã không được coi là đủ để trả lời. –