これはhmac
、提供された を使用してソルトkey
を生成し、ハッシュをより強力にする一方で、提供されたメッセージのみをハッシュするためです。hashlib
モジュールのソース コードを見ると、hmac
モジュールを使用した場合と同じ動作を実現する方法がわかります。使用されているアルゴリズムは次のとおりです (元のアルゴリズムではありません。興味深い部分だけを残すためにいくつかのチェックを外しました)。hmac
hashlib
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
、指定されたハッシュ アルゴリズムを使用して特定のメッセージをハッシュするだけでなく、キーを使用してハッシュを複雑化します。