好的,我试图将字符串的基本转换器编写为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()
    

    10-08 02:39