问题描述
我一直在阅读Owasp 10,并且遇到了存储信息的最佳实践。 盐腌哈希。在这里,您会为每个密码生成一个随机的盐,并将其组合并进行哈希处理并存储。 我的疑问是,如果盐是随机生成的,那么当用户键入密码时如何验证密码? 盐和用户名一起保存了吗? 如果是这样,这种做法仍然很脆弱。 或者他们是怎么做到的?
解决方法
将盐与用户名一起保存。盐不是秘密。重点在于确保两个人使用相同的密码,而不会使用相同的哈希密码。这样可以防止预先计算的哈希攻击(彩虹表),并防止泄露数据库中的两个用户具有相同的密码。
尽管每用户随机盐是理想的,但也可以使用确定性但独特的盐来获得盐分的好处。例如,您可以为数据库使用一些固定的字符串,并将其与用户ID(com.example.mygreatsystem:[email protected]
)结合使用,并将其用作盐。由于它对每个用户都是唯一的(不仅在此系统内,而且在整个系统内),因此它可以实现与随机盐相同的目标,而无需额外的数据库查找。像使用随机盐一样,此方案也不必保密。盐的重要部分是独特的。但是,在可行的情况下,最好的做法是在用户记录中存储一个足够长的用户随机盐(通常为8个随机字节)。