为何相同字符串生成的MD5哈希结果不同?如何解决?
问题原因
你代码里的b'{a}'是把字面量字符串"{a}"转换成字节串,而非变量a的实际值"some text"。同理b'{b}'对应的是字面量"{b}",这两个字符串内容不同,所以MD5哈希结果自然不一样。
解决方法
直接将字符串变量编码成字节串传入hashlib.md5()即可,若需要拼接内容也可以用正确的字符串格式化方式后再编码:
方法1:直接编码变量(最简洁)
变量本身就是字符串,直接调用encode()转成字节串:
hashA = hashlib.md5(a.encode()).hexdigest()[:8] hashB = hashlib.md5(b.encode()).hexdigest()[:8]
方法2:格式化字符串后编码(适合拼接内容场景)
如果需要拼接其他内容,用f-string格式化后再编码:
hashA = hashlib.md5(f'{a}'.encode()).hexdigest()[:8]
修正后的完整代码
import hashlib a = 'some text' b = 'some text' hashA = hashlib.md5(a.encode()).hexdigest()[:8] hashB = hashlib.md5(b.encode()).hexdigest()[:8] hashT = hashlib.md5(b'some text').hexdigest()[:8] print(hashT) # 552e21cd print(hashA) # 552e21cd print(hashB) # 552e21cd print(a == b) # True
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

