【问题标题】:Python is it possible to check if MD5 string is equal to string in one operation?Python是否可以在一次操作中检查MD5字符串是否等于字符串?
【发布时间】:2014-09-02 22:18:54
【问题描述】:

我得到以下代码,它将来自 Web 服务调用的 MD5 哈希值与本地存储的密码(从数据库中检索)进行比较。 有没有更好或更安全的方法在 python 中进行 MD5 字符串相等性检查? 也许 hashlib 有一个可以接受两个参数并返回 true/false 的函数?

md5   = request.values.get('md5')

m = hashlib.md5()
m.update("mypassword")
md5Python = m.hexdigest()

if md5Python == md5:
    #return success

#return fail

【问题讨论】:

标签: python web-services security md5 string-comparison


【解决方案1】:

hashlib.md5 的构造函数采用可选字符串,因此您不需要调用 .update()

if md5 == hashlib.md5("mypassword").hexdigest():

【讨论】:

    【解决方案2】:

    而不是从数据库中检索密码进行比较 - 散列您从用户那里获得的密码并将该散列部分作为用户查询的一部分?

    select uid from users WHERE username = 'joe@foo.com' AND password = '<hash>';
    

    这样您就永远不会将真正的散列密码加载到应用程序中并有可能暴露它。如果您将整个用户记录加载到应用程序中,则会增加信息泄露的可能性,并在一定程度上破坏密码哈希的全部意义。

    另外,使用 AES-512 或 AES-256 - md5 已经不够好了。

    【讨论】:

      猜你喜欢
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 2022-06-19
      • 1970-01-01
      相关资源
      最近更新 更多