Python md5 密码值
我有一个修改密码的请求表单。在这个表单中,用户需要输入他们的旧密码。
这个旧密码是以md5格式存储的。
我该如何将数据库中的md5值与用户输入的旧密码进行比较呢?
import md5
oldpasswd_byuser=str("tom")
oldpasswd_db="sha1$c60da$1835a9c3ccb1cc436ccaa577679b5d0321234c6f"
opw= md5.new(oldpasswd_byuser)
#opw= md5.new(oldpasswd_byuser).hexdigest()
if(opw == oldpasswd_db):
print "same password"
else:
print "Invalid password"
4 个回答
1
这不是md5,而是sha1 - "sha1$xxx
。
你需要使用sha1的相关函数。关于这方面的详细说明可以查看这个文档:http://docs.python.org/library/sha.html
2
我觉得 oldpasswd_db
不是一个MD5值。它更像是几种加密方法的组合(在这个例子中是SHA1),还有一个盐值和密码的哈希值。
试着把盐值和密码连接起来:
import hashlib
hashlib.sha1('c60datom').hexdigest()
3
你放进去的那个哈希值是经过加盐的sha1十六进制字符串,这是Django(还有很多其他框架)默认的存储方式。
用来验证这个哈希的代码在contrib/auth/models.py文件里。从那里你可以看到,Django默认使用md5算法。你需要做的就是把旧的哈希值更新成以下的格式:
md5$<salt>$<hash>
如果你的哈希值还没有加盐,就把盐留空(md5$$<hash>
),但在用户下次成功登录时,要把哈希值更新为sha1格式。