可能重复:
安全散列和盐的PHP密码
我想提出的是在一个MySQL数据库中存储的用户凭据(电子邮件,用户名和密码),并使用加密,盐渍和加密类型已经看到矛盾的观点的系统。
什么是你会推荐最好的方法是什么? 编码的MD5或SHA-1? 盐渍或腌制不? 只是加密密码或所有3个元素?
可能重复:
安全散列和盐的PHP密码
我想提出的是在一个MySQL数据库中存储的用户凭据(电子邮件,用户名和密码),并使用加密,盐渍和加密类型已经看到矛盾的观点的系统。
什么是你会推荐最好的方法是什么? 编码的MD5或SHA-1? 盐渍或腌制不? 只是加密密码或所有3个元素?
对于密码哈希使用PBKDF2是NIST认可 。 您应该使用一个随机的非秘密盐每个密码和平凡的(1000)迭代次数。
对于用户名和电子邮件,可能不值得进行加密。
最好的做法是IMO:
使用哈希算法如SHA256或SHA512。 MD5现在是不安全的,你可以扭转的哈希/执行彩虹攻击。
使用一个强大的盐,以确保如果他们获准进入你的数据库攻击者无法猜测常用哈希密码。
不要使用加密。
只有散列密码,用户名和电子邮件的罚款为纯文本。
这只是真的,你需要加密的密码。 实际上,你既要Hashing
(这时候你说的编码你的意思)的算法至少 SHA-256真的(我敢肯定,MD5和SHA1是攻破?) 和 Salting
你的密码是更加安全。
下面是关于它们存储的首选方法的答案: 首选方法存储的口令在数据库
用户名和电子邮件不应该被加密,你需要他们的明文,他们会更加有用的方式。
作为密码:他们要绝对被加密或散列,优选盐太。 到现在为止,我用了一个有点有趣的技术来做到这一点:AES,关键的是密码本身。 因此,如果用户使他的密码是“blabla123”,那么我会通过调用存储在MySQL AES_ENCRYPT('blabla123', 'blabla123')
有2个优势是:
有效性然后通过加密什么类型的用户和比较2点的值来完成。
密码应具有较强的盐散列来保护(MD5或SHA-1是罚款),以防止攻击使用彩虹表。
你不应该哈希的电子邮件地址 - 只要你凑它,您无法使用它比对什么类型的用户检查其它任何东西,所以有它散列会阻止您发送电子邮件的那个人。 同样的用户名会被最好存储在纯文本,让你确定那个人。