好的,我正在尝试将字符串的基本转换程序编写成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,并且必须对其进行编码。查看您进行的调用(从堆栈跟踪):看起来您必须运行Python 3,其中字符串是unicode对象。若要编码为字节表示,然后可以由hashlib处理,请更改此
对此(如果utf-8是适合您使用的编码-这取决于您将如何使用它):
如果这对你来说都是新闻,你可能应该读一下优秀的Python 3 Unicode HOWTO。
另外,当我在这里时,你的代码还有一些其他问题
from hashlib import
行或临时md5string
。import hashlib
应该移动到模块范围。要修复和整理所有内容,请尝试以下操作:
似乎在散列之前必须对字符串进行编码:
http://www.dreamincode.net/forums/topic/246026-generating-string-hash-issue/
与其试图散列字符串,不如散列一个已编码的字节序列。而不是
您应该对其进行编码,例如:
在Python2中,您可以不这样做就离开,这导致了许多未被注意到的错误。幸运的是,Python 3对unicode的支持更加健全,并且能够区分字节和字符串。
相关问题 更多 >
编程相关推荐