好吧,我正在尝试编写一个字符串到 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
最佳答案
如错误提示,您的 string
必须是 unicode,您必须对其进行编码。查看您进行的调用(从您的堆栈跟踪):
computeMD5hash("The quick brown fox jumps over the lazy dog")
看起来您必须运行 Python 3,其中字符串是 unicode 对象。要编码为随后可以由 hashlib 处理的字节表示,请更改此
m.update((string))
为此(如果 utf-8 是适合您使用的编码 - 这取决于您将如何使用它):
m.update(string.encode('utf-8'))
如果这对您来说都是新闻,您可能应该阅读优秀的 Python 3 Unicode HOWTO .
此外,当我在这里时,您的代码还有一些其他问题
- 一些不必要的位 - 不需要
from hashlib import
行或临时md5string
。 - 从函数中导入模块是一种错误的形式,因此应将
import hashlib
移至模块范围。 - 函数返回
digest()
这是原始二进制文件,从您的堆栈跟踪来看,您似乎在期待hexdigest()
相反,这与表示为十六进制字符串的内容相同。
要修复和整理它,试试这个:
import hashlib
def computeMD5hash(my_string):
m = hashlib.md5()
m.update(my_string.encode('utf-8'))
return m.hexdigest()
关于python - 字符串转MD5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259691/