です。 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 –