存储用户名的最佳实践& MySQL数据库中的密码

时间:2012-05-01 11:53:17

标签: mysql database database-design encryption password-encryption

  

可能重复:
  Secure hash and salt for PHP passwords

我正在制作一个在MySQL数据库中存储用户凭据(电子邮件,用户名和密码)的系统,并且看到使用加密,腌制和加密类型的观点存在冲突。

您推荐的最佳方法是什么?在MD5或SHA1中编码?腌制还是不腌制?只加密密码或所有3个元素?

5 个答案:

答案 0 :(得分:11)

对于密码哈希,请使用PBKDF2NIST approved。您应该为每个密码和非平凡(超过1000)迭代计数使用随机非秘密盐。

对于用户名和电子邮件,可能不值得加密。

答案 1 :(得分:6)

IMO的最佳实践是:

  • 使用散列算法,如SHA256或SHA512。 MD5现在不安全,因为你可以反转哈希/执行彩虹攻击。

  • 使用强盐来确保攻击者在获得数据库入口时无法猜出通常的哈希密码。

  • 不要使用加密。

  • 只对密码,用户名和电子邮件进行哈希处理,就像纯文本一样。

答案 2 :(得分:2)

这只是你需要加密的密码。实际上,在至少 SHA-256的算法中你应该同时是Hashing(这就是你说编码时的意思)(我很确定MD5和SHA1是可以破解的吗?) AND Salting您的密码更加安全。

以下是关于存储它们的首选方法的答案:Preferred Method of Storing Passwords In Database

答案 3 :(得分:1)

用户名和电子邮件不应该加密,你需要它们是纯文本的,它们会更有用。

至于密码:它们应该绝对加密或散列,最好是加盐。到目前为止,我使用了一种有趣的技术来做到这一点:AES,其关键是密码本身。因此,如果用户将其密码设为“blabla123”,那么我会通过调用AES_ENCRYPT('blabla123', 'blabla123')将其存储在MySQL中。这有两个好处:

  • 您不会将加密密钥存储在任何地方
  • 使用不同的密钥加密每个密码。因此,即使你想出一个密钥,也会对其有用性产生限制。

然后通过加密用户输入的内容并比较2个值来完成有效性。

答案 4 :(得分:0)

密码应该使用强盐(MD5或SHA1都可以)进行散列保护,以防止使用彩虹表进行攻击。

您不应该对电子邮件地址进行哈希处理 - 只要您对其进行哈希处理,除了检查用户键入的内容之外,您无法将其用于任何其他内容,因此对其进行哈希处理会阻止您向该人发送电子邮件。同样,用户名最好以纯文本形式存储,以便您识别该人。