2010-10-22 94 views
4

我目前使用MD5加密在数据库中存储密码。我们之前没有密码重置功能。但现在我们正在实施它。所以我无法解密MD5并将密码发送给用户。但是我可以做,如果它是在base64加密。现在我有点困惑,这是最好的加密方法。
我已经做了强密码的客户端验证(如8字符长度,特殊字符等)。哪个是最好的加密方法base 64或MD5?

+1

请阅读此前的问题+答案:http://stackoverflow.com/questions/2780198/phphow-to-send-the-original-password-to-the-user-when-he-clicks-forgot-password – Amber 2010-10-22 04:49:42

+1

不要在客户端进行验证,除非您确认该验证被破坏。如果某人在某个时候写了一个备用客户端,那么你不希望他们在你的安全性中挖洞。你也可以在客户端进行检查,但这只是为了避免往返。 – 2010-10-22 04:52:48

+0

Md5哈希不像以前那样安全,至少使用sha1,而sha256(从我所知道的)是足够安全的。 – Joakim 2010-10-22 04:53:04

回答

16

Base 64不是一种加密机制,它是一种编码方案。它很容易颠倒过来,所以它不是保护关键数据的好选择。

密码的常用方法是用MD5对它们进行哈希处理,然后存储哈希。当用户再次登录时,对输入密码进行散列,并将其与存储的散列进行比较。

如果用户忘记了他的密码,那么您应该无法告诉他它是什么。相反,让他把它重置为其他东西(大概他能记得的东西)。

此外,正如@Phil Brown提到的,MD5 is not considered a strong encryption mechanism。 SHA-1将更适合完成这项任务。

Base 64编码通常用于通过仅允许ASCII文本的机制传输二进制数据。

+4

忘记密码的常见方法是重置密码,向用户发送新密码并强制他们在登录时更改密码。另外,在这个忘记的密码时间,SHA1是一个比MD5 – Phil 2010-10-22 04:46:56

+0

更强的哈希算法,我是否可以再次获得密码? – svk 2010-10-22 04:46:59

+1

@vinothkumar:你不知道。你随机为他们生成一个全新的密码 - 不是他们选择的。另外,一旦他们重设密码,我会考虑锁定帐户,如果他们在一段时间后没有更改密码,因为电子邮件是以明文形式发送的。 – 2010-10-22 04:57:00

6

Base64不是加密,它是一种容易可逆的编码机制。 MD5是单向加密哈希,尽管它使用is not recommended because it is cryptographically weak

为了您的需要,您可能需要存储密码的散列(更适合salt),可能使用SHA-256或更高版本。当用户忘记密码时,您会为它们生成一个随机的一次性密码,并强制它们重新创建密码,或者在验证某些凭证后让它们执行密码。

3

Base64和MD5是没有加密方法。 Base64只是一种编码字符的方式,它绝对不提供安全性 - 它与以纯文本形式存储密码一样好。 MD5是一个散列函数,这意味着它是单向的并且不能被解密。

哈希值肯定是要走的路。 MD5没问题,但你应该切换到更安全的功能,如SHA-256。

至于“忘记密码”功能,从不存储用户的密码并将其发回给他们。相反,为他们生成(随机)临时密码,以便他们可以登录并更改密码。

1

最佳做法是使用MD5存储密码哈希,就像您现在(或甚至更好的SHA256)一样。

不要做密码恢复。相反,当用户忘记密码时,请创建一个新的随机密码并将其发送给他们。然后他们可以登录并将密码设置为他们喜欢的东西。更安全。