安全用户身份验证如何工作?

时间:2013-06-09 18:18:09

标签: java security hash login salt

当用户注册时,我会使用他们的密码并使用hash和salt来保护它,然后将其存储到mysql DB中。因此,当注册用户尝试登录时,如何检查密码是否有效?

我能想到的唯一方法是获取密码,哈希+盐,然后检查哈希+盐是否在数据库中。我不确定这是如何安全的?因为这意味着我的代码将哈希+ salt任何密码并在DB中找到匹配。

我读过每次登录页面时都会生成随机盐,但这并不意味着如果注册用户尝试登录新的哈希值,则会生成与同一用户注册时生成的哈希值不同的哈希值。

如果有人能说清楚这一点,我将不胜感激。我正在使用Java。

2 个答案:

答案 0 :(得分:2)

基本上你必须在数据库中存储h(password+salt)salt。如果某些用户尝试登录,您将获得其纯文本密码。然后从数据库中获取用户的salt,生成password+salt的哈希值,如果它与存储的哈希值相同,则验证成功。

这比基本的哈希密码更安全,因为它使哈希中的大规模强制变得更难,因为攻击者必须猜测盐和实际密码。但是,如果盐是公开的(或者是攻击者已知的),这并不会使单个密码变得更难。它还使彩虹表无用,这是普通密码的大量预生成哈希列表

要获得更深入的解释,请查看herehere

答案 1 :(得分:0)

在我的情况下,我将散列的(salt + password)和salt存储在数据库中,当用户提供登录名和密码时,我得到了salt,添加到提供的密码中,然后进行散列并与存储的散列密码进行比较从数据库。如果相等/正确,我将重新生成新的盐并存储,然后将新的盐添加到正确的密码中,然后进行哈希并存储。