2011-10-21 14 views
4

ハッシュをバイナリ(64バイト)として保存します。しかし、どんなタイプのAPI(Webサービス)でも、私はそれらを文字列として渡したいと思っています。 hashlib.hexdigest()は私に文字列を与え、hashlib.digest()は私にバイナリを与えるでしょう。しかし、たとえば、ディスクからバイナリバージョンを読み込んだ場合、それを文字列に変換するにはどうすればよいですか?そして、文字列をWebサービスから読み込んだ場合、どうすれば2進数に変換できますか?ヘックスダイジェストからダイジェストへの翻訳方法(その逆)

答えて

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では、生のバイトと16進文字列の間の変換にstr.decode('hex')str.encode('hex')を使用できます。 3.xでは、binasciiモジュールを使用する必要があります。

関連する問題