gpt4 book ai didi

python - 为什么 hashlib 和 hmac 生成不同的哈希值?

转载 作者:太空狗 更新时间:2023-10-29 19:33:24 25 4
gpt4 key购买 nike

在 Python 2.7 中,

my = "my"
key = "key"
print(hashlib.sha256(my + key).hexdigest())
print(hmac.new(my, key, hashlib.sha256).hexdigest())

输出,

5e50f405ace6cbdf17379f4b9f2b0c9f4144c5e380ea0b9298cb02ebd8ffe511
15a55993a27e0de7a4c4daa67a7c219199a464ca283797f545b783cce07b38a5

还是我理解错了?

最佳答案

这是因为 hmac 使用提供的 key 生成 salt并使散列更强大,而 hashlib 仅散列提供的消息。

通过查看hmac 模块source code ,你会发现如何使用 hashlib 模块实现与 hmac 相同的行为,这里是使用的算法(这不是原来的算法,我去掉了一些检查,只有有趣的部分):

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时,它不仅使用指定的散列算法对给定的消息进行散列,它还使用 key 来复杂化散列。

关于python - 为什么 hashlib 和 hmac 生成不同的哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6938675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com