Python能否在一次操作中检查MD5字符串是否与字符串相等?
我有一段代码,它是用来比较一个从网络服务获取的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():