如何从六进制摘要翻译成摘要,反之亦然



我想将散列存储为二进制(64字节(。但对于任何类型的API(web服务(,我都希望将它们作为字符串传递。hashlib.hexdigest()会给我一个字符串,hashlib.digest()会给我二进制。但是,例如,如果我从磁盘读取二进制版本,我将如何将其转换为字符串?如果我从web服务中读取字符串,我将如何将其转换为二进制?

您可能需要研究binascii模块,特别是hexlifyunhexlify函数。

在2.x中,可以使用str.decode('hex')str.encode('hex')在原始字节和十六进制字符串之间进行转换。在3.x中,您需要使用binascii模块。

您可以从字符串版本开始传递并显示:

>>> import hashlib
>>> string_version = hashlib.md5(b'hello world').hexdigest()

将其转换为二进制文件并写入磁盘:

>>> save_as_binary = string_version.encode('utf-8')
>>> print(save_as_binary)
b'5eb63bbbe01eeed093cb22bb8f5acdc3'

从磁盘读回时,将其转换回字符串:

>>> back_to_string = save_as_binary.decode('utf-8')
>>> print(back_to_string)
5eb63bbbe01eeed093cb22bb8f5acdc3

这里的一些现有答案没有抓住要点。摘要是字节,六进制摘要是str:

>>> from hashlib import md5
>>> h = md5(b"hello world")
>>> h.digest()
b'^xb6;xbbxe0x1exeexd0x93xcb"xbbx8fZxcdxc3'
>>> h.hexdigest()
'5eb63bbbe01eeed093cb22bb8f5acdc3'

从摘要(字节(到六进制摘要(str(,使用bytes.hex:

>>> h.digest().hex()
'5eb63bbbe01eeed093cb22bb8f5acdc3'

从六进制摘要(str(到摘要(字节(,使用bytes.fromhex:

>>> bytes.fromhex(h.hexdigest())
b'^xb6;xbbxe0x1exeexd0x93xcb"xbbx8fZxcdxc3'

相关内容

  • 没有找到相关文章

最新更新