1

我不了解有关 hashlib 的内容。我不确定为什么我可以解码常规字节对象,但无法解码作为字节对象返回的哈希。我不断收到此错误:

UnicodeDecodeError:“utf-8”编解码器无法解码位置 1 的字节 0xad:无效的起始字节

这是我产生此错误的测试代码。错误在第 8 行 ( h2 = h.decode('utf-8'))

import hashlib

pw = 'wh@teV)r'
salt = 'b7u2qw^T&^#U@Lta)hvx7ivRoxr^tDyua'
pwd = pw + salt
h = hashlib.sha512(pwd.encode('utf-8')).digest()
print(h)
h2 = h.decode('utf-8')
print(h2)

如果我不散列它,它工作得很好......

>>> pw = 'wh@teV)r'
>>> salt = 'b7u2qw^T&^#U@Lta)hvx7ivRoxr^tDyua'
>>> pwd = pw + salt
>>> h = pwd.encode('utf-8')
>>> print(h)
b'wh@teV)rb7u2qw^T&^#U@Lta)hvx7ivRoxr^tDyua'
>>> h2 = h.decode('utf-8')
>>> print(h2)
wh@teV)rb7u2qw^T&^#U@Lta)hvx7ivRoxr^tDyua

所以我猜我对哈希不了解,但我不知道我错过了什么。

4

1 回答 1

1

在第二个示例中,您只是编码为 UTF-8,然后直接解码结果。

另一方面,在第一个示例中,您正在编码为 UTF-8,处理字节,然后尝试将其解码,就好像它仍然是 UTF-8。结果字节是否仍然有效,因为 UTF-8 完全取决于机会(即使它仍然是有效的 UTF-8,它表示的 Unicode 字符串与原始字符串无关)。

于 2012-08-16T18:40:03.163 回答