Как перевести из hexdigest в дайджест и наоборот? - PullRequest
5 голосов
/ 22 октября 2011

Я хочу хранить хеши в двоичном виде (64 байта).Но для любого типа API (веб-службы) я хотел бы передать их в виде строк.hashlib.hexdigest() даст мне строку, а hashlib.digest() даст мне двоичный файл.Но если, например, я читаю в двоичном варианте с диска, как бы я преобразовал его в строку?И если я прочитаю строку из веб-службы, как мне преобразовать ее в двоичный файл?

Ответы [ 3 ]

7 голосов
/ 22 октября 2011

Возможно, вы захотите изучить модуль binascii, в частности функции hexlify и unhexlify.

4 голосов
/ 22 октября 2011

В 2.x вы можете использовать str.decode('hex') и str.encode('hex') для преобразования между необработанными байтами и шестнадцатеричной строкой.В 3.x вам нужно использовать модуль binascii.

3 голосов
/ 22 октября 2011

Вы можете начать с строковой версии, чтобы обойти и отобразить:

>>> 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
...