base64.encodestring возвращает ошибку Объекты Unicode должны быть закодированы перед хэшированием - PullRequest
0 голосов
/ 15 мая 2019

Я использую следующий код, который отлично работает на python2.7. Этот код возвращает мне ошибку «Объекты Unicode должны быть закодированы перед хэшированием» на Python 3.7. Может кто-нибудь, пожалуйста, скажите мне, как это в версии Python3.7.

base64.encodestring (hashlib.sha256 (any_string) .digest ()). Полоса ()

От этого зависит множество нижестоящих кодов, поэтому я не могу изменить этот алгоритм. Я хочу такой же вывод в python3.7.

Любые указатели будут оценены.

1 Ответ

0 голосов
/ 15 мая 2019

base64.encodestring(hashlib.sha256(any_string.encode('UTF-8')).digest()).strip()

В Python 3+ объекты юникода (строки) и байты обрабатываются иначе, чем в Python 2. Кажется, что функция sha256 требует байтов, а не юникода, поэтому возникает ошибка. Добавление .encode('UTF-8') к строке даст правильный формат для функции sha256. Я проверил это в обоих Python 2.7 и 3.7, и оба работают правильно и дают одинаковый вывод.

...