如何在十六进制摘要与摘要之间转换?

11 投票
4 回答
22600 浏览
提问于 2025-04-17 04:47

我想把哈希值存储为二进制格式(64个字节)。但是对于任何类型的API(网络服务),我希望把它们作为字符串传递。使用hashlib.hexdigest()可以得到一个字符串,而hashlib.digest()则会给我二进制格式。不过,如果我从磁盘读取了二进制版本,怎么把它转换成字符串呢?如果我从网络服务读取了字符串,又该怎么把它转换成二进制呢?

4 个回答

7

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

10

你可以看看 binascii 这个模块,特别是里面的 hexlifyunhexlify 这两个函数。

4

你可以先用字符串的形式来传递和显示数据:

>>> 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

撰写回答