python 3.6 和 django 1.10 不支持 md5

md5 not support in python 3.6 and django 1.10

我想解密从 CCavenue.In 他们使用 md5 库的参考代码收到的响应,但不支持 python 3.6 的 django 1.10。

import md5

ModuleNotFoundError: 没有名为 'md5'

的模块

在 python3.x 中,你应该使用这个:

from hashlib import md5

You can now feed this object with bytes-like objects (normally bytes) using the update() method.

例如

from hashlib import md5

m = md5()
m.update(b"Nobody")
print(m.hexdigest())

Module name: md5 .
Rationale: Replaced by the 'hashlib' module.
Date: 15-May-2007 .
Documentation: Documented as deprecated as of Python 2.5, but listing in this PEP was neglected.DeprecationWarning raised as of Python 2.6.

查看来自 hashlib 的更多详细信息。

感谢McGrady的回答。

这是我的详细解释:

  • Python 2.x
    • md5为单模块
      • 未合并到 hashlib
    • update()支持str
      • 不是bytes
    • 特殊:对于Python 2.7md5已合并到hashlibupdate()仍然支持str
    • 代码:
try:
    import md5
except ImportError:
    from hashlib import md5

def generateMd5(strToMd5) :
    encrptedMd5 = ""
    md5Instance = md5.new()
    #<md5 HASH object @ 0x1062af738>
    md5Instance.update(strToMd5)
    encrptedMd5 = md5Instance.hexdigest()
    #af0230c7fcc75b34cbb268b9bf64da79
    return encrptedMd5

  • Python 3.x
    • md5 已合并为 hashlib
    • update()只支持bytes
      • 不支持str
    • 代码:
from hashlib import md5 # only for python 3.x

def generateMd5(strToMd5) :
    """
    generate md5 string from input string
    eg:
        xxxxxxxx -> af0230c7fcc75b34cbb268b9bf64da79
    :param strToMd5: input string
    :return: md5 string of 32 chars
    """
    encrptedMd5 = ""
    md5Instance = md5()
    # print("type(md5Instance)=%s" % type(md5Instance)) # <class '_hashlib.HASH'>
    # print("type(strToMd5)=%s" % type(strToMd5)) # <class 'str'>
    bytesToMd5 = bytes(strToMd5, "UTF-8")
    # print("type(bytesToMd5)=%s" % type(bytesToMd5)) # <class 'bytes'>
    md5Instance.update(bytesToMd5)
    encrptedMd5 = md5Instance.hexdigest()
    # print("type(encrptedMd5)=%s" % type(encrptedMd5)) # <class 'str'>
    # print("encrptedMd5=%s" % encrptedMd5) # 3a821616bec2e86e3e232d0c7f392cf5
    return encrptedMd5