从数据库获取MD5代码并在PHP中解码

时间:2011-05-02 23:40:27

标签: php mysql md5

  

可能重复:
  I Have md5 encrypted password, how to give the password to user when he uses “Forgot password”?
  PHP:How to send the original password to the user when he clicks forgot password which is encrypted by using md5?

我不知道这是问题这个问题的正确方法,但我正在用PHP实现我自己的会员资格脚本,现在,我仍然坚持从数据库中检索MD5代码。好的,我将用户信息插入数据库,由于安全问题,我在将密码保存到数据库之前对其进行了加密,但我的问题是,当我尝试创建忘记密码的东西时,如何从中获取未加密的密码数据库。顺便说一句,我使用MySQL而我的问题不是关于从数据库插入或检索数据,我只问我如何反转MD5的事情。提前谢谢!

5 个答案:

答案 0 :(得分:6)

你不能。一般来说,MD5哈希或哈希是不可逆的。这正是您首先使用它们来存储密码的原因,因为您不需要知道实际密码的责任

忘记密码功能是通过向用户发送一封电子邮件来实现的,他只需点击一次链接并让​​他输入新密码。

答案 1 :(得分:2)

MD5本来是单向的,但它现在已经彻底不安全了。如果你真的认真对待任何安全措施,而不仅仅是通过动议,你有一些阅读要做:

http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html

SHA512 vs. Blowfish and Bcrypt

http://codahale.com/how-to-safely-store-a-password/

答案 2 :(得分:1)

实际上你再也没有收到密码了,

您对输入的密码进行哈希并与数据库中的has进行比较,这就是它的工作原理:)祝你好运

答案 3 :(得分:1)

MD5是单向哈希,所以反转它不会起作用。

如何执行此操作是对存储的内容进行执行比较,例如: 用于输入用户的SQL:

INSERT INTO `users` (`username`, `password`) VALUES ('$username', MD5('$password'));

这意味着密码存储为哈希。 当有人试图登录时,你会在select语句中执行相同的操作:

SELECT * FROM `users` WHERE `username` = '$username' AND `password` = MD5('$password');

如果有结果,那么用户会通过身份验证,如果结果超过1,那么您就玩得很开心:)

对于忘记密码位,您最好设置一个链,用户通过电子邮件发送代码和链接。他们可以在“密码重置”页面输入该代码以及新密码。

HTH

答案 4 :(得分:0)

有多种方法可以处理忘记的密码,但是从MD5哈希中找出原始密码实际上不是其中之一。

但是,对于记录,您确实不应该使用MD5(或许多与安全相关的其他内容)。 MD5非常严重破坏 - 除非绝对在此事上没有选择,切换到别的东西(哦,但你也应该知道SHA-1只是一点点比MD5更好。