Python md5 密码值

4 投票
4 回答
11331 浏览
提问于 2025-04-16 06:02

我有一个修改密码的请求表单。在这个表单中,用户需要输入他们的旧密码。

这个旧密码是以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格式。

撰写回答