当用户注册时,我会使用他们的密码并使用hash和salt来保护它,然后将其存储到mysql DB中。因此,当注册用户尝试登录时,如何检查密码是否有效?
我能想到的唯一方法是获取密码,哈希+盐,然后检查哈希+盐是否在数据库中。我不确定这是如何安全的?因为这意味着我的代码将哈希+ salt任何密码并在DB中找到匹配。
我读过每次登录页面时都会生成随机盐,但这并不意味着如果注册用户尝试登录新的哈希值,则会生成与同一用户注册时生成的哈希值不同的哈希值。
如果有人能说清楚这一点,我将不胜感激。我正在使用Java。
答案 0 :(得分:2)
基本上你必须在数据库中存储h(password+salt)
和salt
。如果某些用户尝试登录,您将获得其纯文本密码。然后从数据库中获取用户的salt,生成password+salt
的哈希值,如果它与存储的哈希值相同,则验证成功。
这比基本的哈希密码更安全,因为它使哈希中的大规模强制变得更难,因为攻击者必须猜测盐和实际密码。但是,如果盐是公开的(或者是攻击者已知的),这并不会使单个密码变得更难。它还使彩虹表无用,这是普通密码的大量预生成哈希列表
答案 1 :(得分:0)
在我的情况下,我将散列的(salt + password)和salt存储在数据库中,当用户提供登录名和密码时,我得到了salt,添加到提供的密码中,然后进行散列并与存储的散列密码进行比较从数据库。如果相等/正确,我将重新生成新的盐并存储,然后将新的盐添加到正确的密码中,然后进行哈希并存储。