好的,我正在尝试将字符串的基本转换器编写为 md5
哈希码,但是当我运行我的程序时,我不断收到错误消息:
Traceback (most recent call last):
File "C:\Users\Shane\Documents\Amer CISC\lab4.py", line 30, in <module>
assertEqual (computeMD5hash("The quick brown fox jumps over the lazy dog"),("9e107d9d372bb6826bd81d3542a419d6"))
File "C:\Users\Shane\Documents\Amer CISC\lab4.py", line 27, in computeMD5hash
m.update(string)
TypeError: Unicode-objects must be encoded before hashing
我的代码如下所示:
def computeMD5hash(string):
import hashlib
from hashlib import md5
m = hashlib.md5()
m.update((string))
md5string=m.digest()
return md5string
原文由 spenman 发布,翻译遵循 CC BY-SA 4.0 许可协议
正如错误提示的那样,您的
string
必须是 unicode,您必须对其进行编码。查看您所做的调用(从您的堆栈跟踪):看起来您必须运行 Python 3,其中字符串是 unicode 对象。要编码为字节表示形式,然后可以由 hashlib 处理,请更改此
为此(如果 utf-8 是适合您使用的编码 - 这取决于您将如何使用它):
如果这对您来说都是新闻,您可能应该阅读优秀的 Python 3 Unicode HOWTO 。
另外,当我在这里时,您的代码还有一些其他问题
from hashlib import
行或临时md5string
。import hashlib
应该移至模块范围。digest()
原始二进制文件,从您的堆栈跟踪来看,您似乎期待hexdigest()
而不是表示为十六进制字符串的相同内容。要修复和整理所有内容,请尝试以下操作: