2011-10-21 64 views
4

我想将散列存储为二进制(64字节)。但是对于任何类型的API(Web服务),我都想将它们作为字符串传递。 hashlib.hexdigest()会给我一个字符串,而hashlib.digest()会给我的二进制。但是,例如,如果我从磁盘读取二进制版本,我将如何将其转换为字符串?如果我从Web服务读取字符串,我将如何将其转换为二进制文件?如何从十六进制翻译为摘要,反之亦然?

回答

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

这个例子用Python 3.x显示 –

+2

澄清:'hashlib.m d5(b'hello world)。hexdigest()。decode('hex')== hashlib.md5(b'hello world)。digest()' – Ben

+0

@Ben非常感谢。这节省了我很多时间。我正在研究aws s3,并试图找出如何从字符串 - >二进制 - >字符串发生ETag转换。网上有很多答案,但没有任何工作对我来说。但是当我尝试你的答案时,它工作得很好。所以谢谢你alotttttt。 –

3

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

相关问题