5

我想将字节变量转换为字符串。当然,还有一些与我有关的先前问题。但是,尝试以这种方式在 md5() 中散列文件的内容:

import hashlib
with open("C:\\boot.ini","r") as f:
    r=f.read()
a=hashlib.md5()
a.update(r.encode('utf8'))
bytes_data=a.digest()
print(bytes_data)
r=type(bytes_data)
print(r) # <-- Just to be sure, it is in bytes 
myString=bytes_data.decode(encoding='UTF-8')

我收到了这个错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe3 in position 1: invalid continuation byte

由于这个问题,我理解了我的问题的原因,但是我正在处理不同的文件来计算它们的哈希值,所以我无法控制字节,那么我该如何解决这个问题?

4

1 回答 1

8

hash.digest()返回值不是UTF-8 编码的字符串。不要试图解码它;它是 0-255 范围内的字节序列,这些字节不代表文本。

并非所有bytes内容都对文本进行编码;这是一个这样的价值。

hash.hexdigest()如果您想要可打印的东西,请使用。此方法返回以十六进制数字表示的字节(每个摘要字节两个十六进制字符)。这是与他人共享 MD5 摘要时常用的形式。

于 2014-07-23T12:57:05.173 回答