python - 字符串转MD5

标签 python string python-3.x md5

好吧,我正在尝试编写一个字符串到 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/

相关文章:

python - Django:如何从其他两个字段计算一个字段的初始值?

python - 在多个模块中使用函数类型的错误签名错误

c++ - 从以 string_view 作为参数的函数返回字符串时出错

python - 属性错误 : module 'regex' has no attribute 'Pattern'

python - Python 3.x 中的 `__rdiv__()` 和 `__idiv__` 运算符是否已更改?

python - 在 Pandas 中组合奇数和偶数索引行

python - 艰难地学习 Python,练习 6。

python - 使用 Keras 通过 "optimal"输入图像可视化 CNN 生成的特征/内核

C++ string() 与 c 字符串的比较。为什么这行得通?

string - Pandas 系列 str 链接在一起时替换不起作用