【问题标题】:base64.encodestring returns error Unicode objects must be encoded before hashingbase64.encodestring 返回错误 Unicode 对象必须在散列之前进行编码
【发布时间】:2019-05-14 22:45:40
【问题描述】:

我正在使用以下在 python2.7 上运行良好的代码。此代码在 python 3.7 上返回错误“Unicode 对象必须在散列之前编码”。有人可以告诉我这在 python3.7 版本中的相同之处吗?

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

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

任何指针将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    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 中对此进行了测试,并且都可以正常工作并给出相同的输出。

    【讨论】:

    • 所以这个在 python2.7 base64.encodestring(hashlib.sha256(any_string).digest()).strip() 和这个在 python3.7 base64.encodestring(hashlib.sha256(any_string.encode ('UTF-8')).digest()).strip() 给出相同的输出?
    • base64.encodestring(hashlib.sha256(any_string.encode('UTF-8')).digest()).strip() 适用于 python2.7 和 python3.7
    • 这不是我需要的。我无法在 python2.7 环境中更改原始行。 ——
    • 那么您的第一条评论是正确的。在 python2.7 中排除 .encode('UTF-8') 将得到与在 python3.7 中包含它相同的结果
    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多