我有这个更改密码请求表。用户输入他们的旧密码。
这个旧密码是md5格式。
如何将db中的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"
答案 0 :(得分:3)
你放入的哈希是一个salted sha1 hexdigest,因为django(可能还有许多其他人)默认存储它。
验证它的代码位于contrib/auth/models.py。从那里你可以看到django默认使用md5。您所要做的就是将旧哈希更新为以下格式:
md5$<salt>$<hash>
如果您的哈希值没有被加盐,但是将盐留空(md5$$<hash>
),但在下次用户执行有效登录时将哈希值更新为sha1。
答案 1 :(得分:2)
我不认为oldpasswd_db
是MD5。它看起来更像哈希方法(本例中为SHA1),salt和密码哈希本身。
尝试将salt值与密码连接:
import hashlib
hashlib.sha1('c60datom').hexdigest()
答案 2 :(得分:1)
它不是md5,它是sha1 - "sha1$xxx
。
您必须使用sha1函数。 在http://docs.python.org/library/sha.html
上有相关文档答案 3 :(得分:-1)
将当前密码的值与您可以执行的数据库中存储的密码进行比较:
import md5
input_password = request.POST['password']
md5_hashed_input_password = md5.new(input_password).hexdigest()
#comapre the value to that stored in db
if md5_hashed_input_password == db_password: #password in db should be stored in md5 hash format
print 'password match'
else:
print 'password mismatch'