我正在使用以下在python2.7上正常工作的代码。这段代码向我返回错误python 3.7上的错误“ Unicode对象必须在散列之前编码”。有人可以告诉我在python3.7版本中的情况吗。
base64.encodestring(hashlib.sha256(any_string).digest())。strip()
很多下游代码都依赖于此,因此我无法更改此算法。我想要python3.7中的相同输出。
任何指针将不胜感激。
答案 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中进行了测试,并且都可以正常工作并提供相同的输出。