为什么这个hmac摘要在Python2.7和Python3.7上有所不同?
我试图将一个项目从Python2.7迁移到Python3.7,并遇到了一个hmac摘要问题。运行以下代码会产生两种不同的结果为什么这个hmac摘要在Python2.7和Python3.7上有所不同?,python,python-3.x,python-2.x,hmac,hashlib,Python,Python 3.x,Python 2.x,Hmac,Hashlib,我试图将一个项目从Python2.7迁移到Python3.7,并遇到了一个hmac摘要问题。运行以下代码会产生两种不同的结果 import hmac, hashlib print(hmac.new(bytes([]), bytes([]), hashlib.sha1).hexdigest()) 在Python 2.7上:1bd590e48bea8f0c8cc70602bc55d317c3de7c52 在Python 3.7上:fbdb1d1b18aa6c08324b7d64b71fb76370
import hmac, hashlib
print(hmac.new(bytes([]), bytes([]), hashlib.sha1).hexdigest())
在Python 2.7上:1bd590e48bea8f0c8cc70602bc55d317c3de7c52
在Python 3.7上:fbdb1d1b18aa6c08324b7d64b71fb76370690e1d
为什么这两个结果不同?在Python 3.7中,bytes()
和bytes([])
都被解释为b'
在Python2.7中,bytes()
被解释为'
,这大致相当于Python3.7中的b'
但是,Python 2.7将字节([])
解释为'[]'
这就是差异的根源。如果您使用bytes()
或b''
而不是bytes([])
,那么在Python 2.7和Python 3.7中应该会得到相同的结果。在2.7bytes([])
中是str类型,而在3.7bytes([])
中是bytes类型
如果您在2.7和3.7中为密钥和消息添加类似b“hello”
的内容,您将得到相同的哈希值