如何在十六进制摘要与摘要之间转换?
我想把哈希值存储为二进制格式(64个字节)。但是对于任何类型的API(网络服务),我希望把它们作为字符串传递。使用hashlib.hexdigest()
可以得到一个字符串,而hashlib.digest()
则会给我二进制格式。不过,如果我从磁盘读取了二进制版本,怎么把它转换成字符串呢?如果我从网络服务读取了字符串,又该怎么把它转换成二进制呢?
4 个回答
7
在2.x版本中,你可以使用 str.decode('hex')
和 str.encode('hex')
来在原始字节和十六进制字符串之间转换。而在3.x版本中,你需要使用 binascii
这个模块。
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