Python能否在一次操作中检查MD5字符串是否与字符串相等?

0 投票
2 回答
1678 浏览
提问于 2025-04-19 11:36

我有一段代码,它是用来比较一个从网络服务获取的MD5哈希值和本地存储的密码(这个密码是从数据库里取出来的)。 有没有更好或者更安全的方法来在Python中进行MD5字符串的相等性检查呢? 也许hashlib库里有一个函数,可以接受两个参数并返回真或假?

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

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

if md5Python == md5:
    #return success

#return fail

2 个回答

1

与其从数据库中取出密码来进行比较,不如把用户输入的密码进行哈希处理,然后把这个哈希值作为你查询用户的依据。

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

这样做的好处是,你永远不会把真实的哈希密码加载到应用程序中,从而避免了泄露的风险。如果你把整个用户记录都加载到应用中,就增加了信息泄露的可能性,这样做其实就违背了使用密码哈希的初衷。

另外,建议使用AES-512或AES-256加密,md5现在已经不够安全了。

1

hashlib.md5的构造函数可以接受一个可选的字符串,所以你不需要再调用.update()这个方法了:

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

撰写回答