base64.encodestring返回错误哈希之前必须对Unicode对象进行编码

时间:2019-05-14 22:45:41

标签: python-3.x python-2.7 base64 encode

我正在使用以下在python2.7上正常工作的代码。这段代码向我返回错误python 3.7上的错误“ Unicode对象必须在散列之前编码”。有人可以告诉我在python3.7版本中的情况吗。

base64.encodestring(hashlib.sha256(any_string).digest())。strip()

很多下游代码都依赖于此,因此我无法更改此算法。我想要python3.7中的相同输出。

任何指针将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

在Python 3+中,unicode对象(字符串)和字节的处理方式与在Python 2中不同。sha256函数似乎需要字节而不是unicode,这就是出现错误的原因。在字符串中添加.encode('UTF-8')将为sha256函数提供正确的格式。我已经在python 2.7和3.7中进行了测试,并且都可以正常工作并提供相同的输出。