【问题标题】:md5 not support in python 3.6 and django 1.10python 3.6 和 django 1.10 不支持 md5
【发布时间】:2017-03-16 09:26:47
【问题描述】:

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

import md5

ModuleNotFoundError: 没有名为“md5”的模块

【问题讨论】:

标签: python django ccavenue


【解决方案1】:

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

from hashlib import md5

您现在可以使用 bytes-like 对象(通常 字节)使用 update() 方法。

例如

from hashlib import md5

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

模块名称:md5 .
理由:被“hashlib”模块取代。
日期:2007 年 5 月 15 日。
文档:文档自 Python 2.5 起已弃用,但列出 在这个 PEP 中被忽略了。从 Python 2.6 开始引发 DeprecationWarning。

hashlib查看更多详情。

【讨论】:

  • 感谢您在我使用 hashlib 库时给出的错误回复:- 'builtin_function_or_method' 对象在此行没有属性 'new' encDigest = md5.new ()
  • @MEWEBTECHNOLOGIES 你的意思是hashlib.newhashlib.new
  • 感谢您的reply.But当我使用hashlib和解密我的回应是返回非可读的字符串为: - 0d609f1857d838c7ae0bdcd8df1fe51db2dd1286d30aa0699190bb154fce5584da01ecfbba8596e0a409de2679fbbb51b55617e4639505d02bcb ..... SPAN>
【解决方案2】:

感谢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

【讨论】:

    猜你喜欢
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 2022-08-18
    • 2018-03-28
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多