我想将哈希值存储为二进制(64字节),但对于任何类型的API(Web服务),我都想以字符串形式传递它们。hashlib.hexdigest()
会给我一个字符串,而hashlib.digest()
会给我二进制数据。但是,如果例如我从磁盘中读取了二进制版本,我该如何将其转换为字符串呢?如果我从Web服务中读取字符串,又该如何将其转换为二进制呢?
我想将哈希值存储为二进制(64字节),但对于任何类型的API(Web服务),我都想以字符串形式传递它们。hashlib.hexdigest()
会给我一个字符串,而hashlib.digest()
会给我二进制数据。但是,如果例如我从磁盘中读取了二进制版本,我该如何将其转换为字符串呢?如果我从Web服务中读取字符串,又该如何将其转换为二进制呢?
在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
string_version.encode('utf-8')
并不会提供 hexdigest 的二进制解释,它只提供了一个十六进制字符串的二进制字符串。save_as_binary 与所要求的 digest() 不同。 - Johannes Overmann>>> from hashlib import md5
>>> h = md5(b"hello world")
>>> h.digest()
b'^\xb6;\xbb\xe0\x1e\xee\xd0\x93\xcb"\xbb\x8fZ\xcd\xc3'
>>> h.hexdigest()
'5eb63bbbe01eeed093cb22bb8f5acdc3'
bytes.hex
:>>> h.digest().hex()
'5eb63bbbe01eeed093cb22bb8f5acdc3'
bytes.fromhex
函数:>>> bytes.fromhex(h.hexdigest())
b'^\xb6;\xbb\xe0\x1e\xee\xd0\x93\xcb"\xbb\x8fZ\xcd\xc3'
bytes.fromhex()
函数。 - young_souvlaki