hashlib.md5 python2 против python3 (строка против байтов) - PullRequest
0 голосов
/ 28 мая 2020

Я генерирую ha sh с помощью hashlib.md5 в обоих: python2 и python3. python2 выводит строку, а python3 выводит байты. Я должен использовать кодировку «latin1» в строке в python3, чтобы соответствовать кодировке по умолчанию python2.

Я хочу быть уверен, что python3 выводит тот же результат, что и python2, и использовать строку для дальнейшей обработки.

Вопрос: Как обеспечить / преобразовать строку вывода md5?

Причина в том, что мой python2 является допустимым выводом, и я переношу скрипт с py2 на py3, поэтому хотел бы проверить вывод, но на данный момент я не могу сравнить байты со строкой.

python2:

import hashlib


s = "fred"
hashlib.md5("fred").digest()

out: 'W \ n \ x90 \ xbf \ xbf \ x8c ~ \ xab] \ xc5 \ xd4 \ xe2h2 \ xd5 \ xb1 '

python3:

import hashlib


s = "fred"
hashlib.md5("fred".encode("latin1")).digest()

out: b'W \ n \ x90 \ xbf \ xbf \ x8c ~ \ xab] \ xc5 \ xd4 \ xe2h2 \ xd5 \ xb1 '

1 Ответ

0 голосов
/ 28 мая 2020

Вы можете обойти это, используя md5.hexdigest(), это вернет строку как в Python 2, так и в Python 3.


from hashlib import md5

hash_ = md5()
hash_.update(b"test")
print(hash_.hexdigest())

Python 3 результат:

'098f6bcd4621d373cade4e832627b4f6'

Python 2 результат:

'098f6bcd4621d373cade4e832627b4f6'
...