Điều này là do hmac
sử dụng key
được cung cấp để tạo ra một salt và làm cho hàm băm mạnh hơn, trong khi hashlib
chỉ băm thư được cung cấp.
Bằng cách nhìn vào hmac
mô-đun source code, bạn sẽ thấy làm thế nào để đạt được các hành vi tương tự như hmac
sử dụng các mô-đun hashlib
, ở đây các thuật toán được sử dụng (nó không phải là một bản gốc, tôi tước một số checkings có chỉ là một phần thú vị) :
import hashlib
MESSAGE = "msg"
KEY = "key"
trans_5C = "".join ([chr (x^0x5C) for x in xrange(256)])
trans_36 = "".join ([chr (x^0x36) for x in xrange(256)])
outer = hashlib.sha256()
inner = hashlib.sha256()
KEY = KEY + chr(0) * (inner.block_size - len(KEY))
outer.update(KEY.translate(trans_5C))
inner.update(KEY.translate(trans_36))
inner.update(MESSAGE)
outer.update(inner.digest())
result = outer.hexdigest()
print result # prints 2d93cbc1be167bcb1637a4a23cbff01a7878f0c50ee833954ea5221bb1b8c628
cùng trực tiếp sử dụng hmac
:
import hashlib
import hmac
result = hmac.new(KEY, MESSAGE, hashlib.sha256).hexdigest()
print result # prints 2d93cbc1be167bcb1637a4a23cbff01a7878f0c50ee833954ea5221bb1b8c628
Vì vậy, khi sử dụng hmac
, nó không chỉ có Do đó, thông điệp đã cho bằng cách sử dụng thuật toán băm được chỉ định, nó cũng sử dụng khóa để làm phức tạp băm.
Câu trả lời của bạn ở đây http://stackoverflow.com/questions/2836100/what-is-the-difference-between-a-hash-and-mac-message-authentication-code – Kracekumar
ok cảm ơn. er dj –