有没有办法将散列数据从摘要版本转换为hexdigest版本

时间:2018-04-19 05:32:24

标签: python python-3.x hashlib

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

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

我深入研究了图书馆的运作方式。原来它使用此方法提供哈希并返回值

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'

返回此错误

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

2 个答案:

答案 0 :(得分:2)

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

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'

答案 1 :(得分:1)

您应该可以使用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'