有什么方法可以将散列数据从摘要版本转换为十六进制版本

Is there any ways to convert hash data from digest version to hexdigest version

我想从我当前使用的库中获取一个字符串格式的值。

现在库 return 一个字节类型的值,但我想以字符串类型获取它。所以我使用 bytes.decode() 来转换它,但它给出了一个错误,因为它无法解码某些字符。

我深入了解了图书馆的运作方式。原来它使用这个方法来提供一个散列和 return 值返回

hashlib.sha256(data).digest()

值的一个例子是

b'\xce\xe00-Y\x84M2\xbd\xca\x91\\x82\x03\xddD\xb3?\xbb~\xdc\

然后我解码它并得到一个错误。

那么有什么方法可以将它变回字符串类型,或者我必须创建自己的散列数据版本并改用 hexdigest()。

**已编辑

举个真实的错误例子

b'\xce\xe00-Y\x84M2\xbd\xca\x91\\x82\x03\xddD\xb3?\xbb~\xdc\x19\x05\x1e\xa3z\xbe\xdf(\xec\xd4r'

return这个错误

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

您应该可以使用 binacii.hexlify:

import binascii
binary_string = b'\xce\xe00-Y\x84M2\xbd\xca\x91\\x82\x03\xddD\xb3?\xbb~\xdc'
hex_string = binascii.hexlify(binary_string)
print(hex_string)

输出:

b'cee0302d59844d32bdca915c8203dd44b33fbb7edc'

如果该值如上所述返回摘要,

hashlib.sha256(data).digest()

然后为了得到这个的十六进制摘要, 您可以使用以下代码,

hex_digest = digest.encode('hex').decode()

示例:

digest = b'\xce\xe00-Y\x84M2\xbd\xca\x91\\x82\x03\xddD\xb3?\xbb~\xdc'
hex_digest = digest.encode('hex').decode()
print(hex_digest)

u'cee0302d59844d32bdca915c8203dd44b33fbb7edc'