我在Python2和Python3中使用hashlib.md5生成哈希,Python2输出字符串,而Python3输出字节,我必须在Python3的字符串上使用 "latin1 "编码来匹配默认的Python2编码。
我想确保Python3输出的结果和Python2一样,并使用字符串做进一步处理。
问题:如何确保转换md5输出与python2编码相同,并使用字符串做进一步处理?如何保证转换后的md5输出为字符串?
原因是我的python2是有效的输出,我正在将脚本从py2迁移到py3,所以想验证输出,但目前我无法将字节和字符串进行比较。
python2:
import hashlib
s = "fred"
hashlib.md5("fred").digest()
输出: 'Wnx90xbfxbfx8c~xab]xc5xd4xe2h2xd5xb1'
python3.出: b'Wxnx90xbfxbfx8c~xab]xc5xd4xe2h2xd5xb1'
import hashlib
s = "fred"
hashlib.md5("fred".encode("latin1")).digest()
out: b'W\nx90\xbf\xbf\x8c~\xab]xc5\xd4xe2h2\xd5\xb1'
你可以通过使用 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'