2011-10-21 95 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模塊。

相關問題