hashlib.md5 python2 vs python3(字符串vs字节)

时间:2020-05-27 21:21:36

标签: python string byte md5 hashlib

我在python2和python3中都使用hashlib.md5生成哈希。 python2输出字符串,而python3输出字节。 我必须对python3中的字符串使用“ latin1”编码,以匹配默认的python2编码。

我想确保python3输出的结果与python2相同,并使用字符串进行进一步处理。

问题:如何确保/转换md5输出字符串?

原因是我的python2是有效的输出,并且我正在将脚本从py2迁移到py3,因此想验证输出,但目前无法将字节与字符串进行比较。

python2:

import hashlib


s = "fred"
hashlib.md5("fred").digest()

out:'W \ n \ x90 \ xbf \ xbf \ x8c〜\ xab] \ xc5 \ xd4 \ xe2h2 \ xd5 \ xb1'

python3:

import hashlib


s = "fred"
hashlib.md5("fred".encode("latin1")).digest()

输出:b'W \ n \ x90 \ xbf \ xbf \ x8c〜\ xab] \ xc5 \ xd4 \ xe2h2 \ xd5 \ xb1'

1 个答案:

答案 0 :(得分:0)

您可以使用md5.hexdigest()解决此问题,这将在Python 2和Python 3中都返回一个字符串。


from hashlib import md5

hash_ = md5()
hash_.update(b"test")
print(hash_.hexdigest())

Python 3结果:

'098f6bcd4621d373cade4e832627b4f6'

Python 2结果:

'098f6bcd4621d373cade4e832627b4f6'
相关问题