1 passwords password-protection
我正在开发我的第一个需要登录的网络应用程序,它已经到了我必须决定如何存储密码的时候.我一直在做关于散列密码和添加盐的正确方法的大量阅读.在我看来,推荐的大多数方法都依赖于使用密码哈希存储在数据库中的一些信息变体,可以是使用全部或部分用户名作为盐或其他随机值的一些变体.
相反,我在考虑使用用户自己的密码作为密码的盐.使用算法混淆密码并以某种方式将其添加到自身作为盐.当然,如果攻击者能够访问存储的哈希值和算法的源代码,这将会受到影响,但在这种情况下,任何盐都会受到损害.我的应用程序可能不需要这种级别的安全性,但这只是我在阅读时开始考虑的事情.
我只想从一些更有经验的开发人员那里得到一些反馈.任何反馈都表示赞赏.
如果你从密码本身驱除盐,你将失去盐腌的全部好处.然后,您可以构建一个rainbow-table来获取所有密码,而相同的密码将产生相等的哈希值.
使用salt的主要原因是,攻击者无法构建一个彩虹表,并获取存储在数据库中的所有密码.这就是为什么你应该为每个密码添加一个随机的唯一盐,然后攻击者必须分别为每个密码建立一个彩虹表.为单个密码构建彩虹表是没有意义的,因为暴力强制更快(为什么不在发现密码时停止).
不要害怕做得对,通常编程环境支持创建安全哈希并为您处理salting(例如PHP的password_hash()).salt通常与用于存储的哈希相结合,这使得将其存储在单个数据库字段中变得容易.
我写了一个关于安全存储密码的小教程,也许你想看看它.