我读到了很多关于如何安全存储密码的相互矛盾的建议。我唯一确定的是不要使用MD5!我见过有人提倡使用 PHPbcrypt
函数,这似乎会占用服务器的处理器。我见过提倡盐的人,也见过提倡不使用盐的人。
一切都是那么的不明朗。关于如何安全存储密码是否有真实可信的建议?
编辑:经过大量研究后,我发现 ;login: 中的一篇文章相当深入地讨论了该主题:http://www.usenix.org/publications/login/2004-06/pdfs/alexander.pdf
嗯,这有几个部分。
- 您需要首先尝试使获取您的数据库和密码变得困难,并确保它们的安全。这包括不将密码设置为明文以及不使用对称加密算法。
- 你需要使用一个salt。这样做可以防止人们使用预先计算的查找表(即彩虹表)或类似的东西http://md5.rednoize.com/。为你的盐选择一些数据unique and 不可预料的。我通常使用随机 32 位值,但也不会少太多。
- Some algorithms are stronger than others. This is defined in a couple ways
- 计算速度有多快。越长越好。攻击者计算哈希值的速度越快,暴力攻击的可能性就越大。
- 如果算法没有已知的弱点,则会减少搜索空间。例如,md5 散列中的位数具有误导性,因为有已知的攻击减少实际搜索空间
从今天开始我认为SHA1 或 SHA2在不久的将来,加盐是相当安全的。有一个实用程序叫做bcrypt它使用河豚的不对称变体,并内置盐和计算费用的概念,可能值得一试。
编辑:我想澄清一下盐是什么,因为有一个lotSO和网上对此的误解。
什么是盐not
一个秘密,预先商定的字符串,您使用密码进行哈希处理。这是密钥,而不是盐。
什么是盐
您在散列时将盐(每个散列是唯一且不可预测的)与密码一起包括在内,但您还包括未加密的它的副本outside的哈希值,这样当稍后验证哈希值时,您可以在哈希值之前给出测试密码时包含相同的盐,以便您可以正确地比较哈希值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)