hmac
은 제공된 key
을 사용하여 salt을 생성하고 해시를 더욱 강하게 만들고 hashlib
은 제공된 메시지 만 해시하기 때문입니다.
hmac
모듈
source code보고
, 당신은 여기에 hashlib
모듈, 사용 된 알고리즘을 사용하여 hmac
같은 동작을 달성하는 방법을 발견 할 것이다 (원래 일이 아니다, 나는 어떤 checkings 단지 흥미로운 부분을 가지고 제거) :
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
같은 직접 hmac
를 사용하여 : 그래서
import hashlib
import hmac
result = hmac.new(KEY, MESSAGE, hashlib.sha256).hexdigest()
print result # prints 2d93cbc1be167bcb1637a4a23cbff01a7878f0c50ee833954ea5221bb1b8c628
을 hmac
를 사용하는 경우, 그것은이 아니라 않습니다 지정된 해시 알고리즘을 사용하여 지정된 메시지를 수신하면 해시를 복합화하기 위해 키를 사용합니다.
답변은 여기에 있습니다. http://stackoverflow.com/questions/2836100/what-is-the-difference-between-a-hash-and-mac-message-authentication-code – Kracekumar
감사합니다. 어 DJ –