使用MD5()在Python中进行编码和解码

使用MD5()在Python中进行编码和解码,python,encoding,character-encoding,Python,Encoding,Character Encoding,在Python3.1.1中的Ubuntu10.10上运行此代码 我得到以下错误: UnicodeDecodeError:'utf8'编解码器无法解码位置0中的字节0xd3:无效的继续字节 错误的位置会随着我运行以下代码的时间而变化: (不是真正的钥匙或秘密) 这是运行的输出(sig和密钥信息与实际输出不同) 我假设我没有得到正确的东西,我呼吁解码,但我不能找出它是什么。authHash.digest的打印对我来说似乎有效 如果您尝试将bytearray解码为字符串,并尝试按顺序将字节与编码集的有

在Python3.1.1中的Ubuntu10.10上运行此代码

我得到以下错误:

UnicodeDecodeError:'utf8'编解码器无法解码位置0中的字节0xd3:无效的继续字节

错误的位置会随着我运行以下代码的时间而变化: (不是真正的钥匙或秘密)

这是运行的输出(sig和密钥信息与实际输出不同)

我假设我没有得到正确的东西,我呼吁解码,但我不能找出它是什么。authHash.digest的打印对我来说似乎有效


如果您尝试将bytearray解码为字符串,并尝试按顺序将字节与编码集的有效字符(默认情况下为utf-8)匹配,我将非常感谢您提供有关如何使其工作的任何想法,因为它无法将字节序列与utf-8字母表中的有效字符匹配

如果尝试使用ascii对其进行解码,则会发生同样的情况,任何大于127的值都是无效的ascii字符

因此,如果您试图获得md5散列的可打印版本,您应该对其进行十六进制摘要,这是打印任何类型散列的标准方法,每个字节由2个十六进制数字表示

为此,您可以使用:

authHash.hexdigest()
如果需要在url中使用它,可能需要将bytearray编码为base64:

base64.b64encode(authHash.digest())

1.3.1?! 这可以追溯到90年代中后期。你在哪里找到这么旧的Python版本,更不用说Ubuntu了?你肯定是说3.1.1?哇-这周不太好,不能再吸胶水了。是的,我的意思是3.1.1,那么我如何将它从十六进制转换为ascii?另一端的服务器不需要十六进制编码,只需要ascii表示。我尝试使用binascii.a2b_hex()和binascii.unhexlify(),但没有成功。需要服务器获取原始字节吗?例如,对于md5(b'1'),您必须发送服务器:b'\xc4\xcaB8\xa0\xb9\x82\r\xccP\x9aou\x84\x9b'?因为这不能转换为ascii:-/您应该通过socketThx发送原始字节以获得通知。把它加到我的答案里。
authHash.hexdigest()
base64.b64encode(authHash.digest())