2009-11-27 75 views
0

我使用加密将客户密码存储在数据库中。更新和md5密码

当客户编辑自己的个人数据(包括密码)密码显示为*****

我怎么能明白使用改变了他的密码,这样写不DB连连加密。

我的意思是密码字段中的值是加密值。如果不更改密码必须使用相同的值更新(或完全不更新) 如果用户更改密码为1234,我必须加密1234和写入到DB加密值

感谢

+2

MD5不是加密.alg。这是一个哈希算法。 – erenon 2009-11-27 12:50:32

+0

你能改说你的问题吗?我不明白你的意思在最后两段... – 2009-11-27 12:53:59

回答

6

不要发送md5散列了来自DB的字符串。设置了三个领域:

  • 旧密码
  • 新密码
  • 新密码再次

然后检查MD5哈希后的第一个字段等于在DB所存储的一个。如果是,则散列第二个字段并存储它。 (仅在第二和第三个相等时)

+0

谢谢,我要去ipmlement – ntan 2009-11-27 13:24:28

+0

工程就好了 – ntan 2009-11-27 13:51:27

0

当用户想要更改时,您应该要求输入旧密码和新密码。

这样,您可以对旧密码进行编码,检查编码值是否与数据库中的值相同。如果它是相同的,那么你应该使用编码的新密码更新db中的密码。如果不相同(或旧密码为空),则不更新。

这有助于您区分密码更改和仅设置更改。您还可以获得某种程度的安全性,就好像某人已经捕获了您的用户会话一样,如果没有捕获原始密码,他也无法更改其密码。

0

的几点:

  • MD5是一种散列算法,你将永远无法逆转的哈希,这就是点。
  • 不要使用MD5,因为它已被破解,请使用SHA2 +散列算法(例如SHA256)
  • 只需使用旧密码对数据库中的旧密码进行散列来确认密码。
  • 另一个选项是重置密码,该密码将通过电子邮件将他们确认的(希望)联系电子邮件与新密码一起发送。
  • 如果他们已经登录到系统中,则不需要再次“确认”旧密码。
  • 永远不要从数据库中发回散列密码,这有点破坏你想要完成的目的。