如何从hexdigest翻译成摘要,反之亦然?

esa*_*sac 7 python hash binary-data

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

lor*_*mus 7

你可能想看看binascii模块,特别是hexlifyunhexlify功能.


Ign*_*ams 6

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


Ray*_*ger 5

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

>>> import hashlib
>>> string_version = hashlib.md5(b'hello world').hexdigest()
Run Code Online (Sandbox Code Playgroud)

将其转换为二进制以将其写入磁盘:

>>> save_as_binary = string_version.encode('utf-8')
>>> print(save_as_binary)
b'5eb63bbbe01eeed093cb22bb8f5acdc3'
Run Code Online (Sandbox Code Playgroud)

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

>>> back_to_string = save_as_binary.decode('utf-8')
>>> print(back_to_string)
5eb63bbbe01eeed093cb22bb8f5acdc3
Run Code Online (Sandbox Code Playgroud)

  • 澄清:`hashlib.md5(b'hello world').hexdigest().decode('hex') == hashlib.md5(b'hello world').digest()` (5认同)
  • 语句“string_version.encode('utf-8')”确实不提供十六进制摘要的二进制解释。它只是提供十六进制字符串的二进制字符串。save_as_binary 与所要求的digest() 不同。 (2认同)