当前位置: 首页 > 知识库问答 >
问题:

如何将密码与哈希密码和盐密码进行对比检查?

阳航
2023-03-14

如果用户创建了一个新密码,并通过哈希算法存储在数据库中,则在用户登录时可以将其与用户输入的密码进行匹配。输入到登录屏幕的密码将被哈希化,然后检查它是否与存储的哈希匹配。如果是,则允许用户访问。

然而,如今,密码是经过哈希和盐处理的。因此,当用户第一次注册密码时,它会经过一个散列,然后会被加密10000次以上。这个salt与后端代码生成的关键字相同,还是每次salt都随机生成?

当用户输入密码登录时,它如何匹配哈希和加盐密码,如果每次加盐都是随机的,肯定会得到不同的哈希?这就是为什么即使两个用户输入相同的密码,他们最终会得到不同的哈希。

共有1个答案

陆野
2023-03-14

好问题!

因此,当用户第一次注册密码时,它会经过一个散列,然后会被加密10000次以上。这个salt与后端代码生成的关键字相同,还是每次salt都随机生成?

加盐和哈希单词的实际机制因实现而异。然而,salt背后的一般想法是,为每个存储的密码生成一段称为salt的随机信息。然后,存储的值从密码本身以某种方式与salt混合的散列中派生出来。可能是您对密码进行哈希运算,然后将哈希运算与salt进行多次组合,或者您只是将密码和salt串联在一起,并对其进行多次哈希运算。

要使此过程正常工作,必须为每个密码指定不同的salt。如果每次都使用相同的salt,那么在对同一密码进行哈希运算并将其与salt组合后,它的每个副本看起来都是相同的。这会泄露信息,这不是一件好事。

当用户输入密码登录时,它如何与哈希和salt密码匹配,如果每次salt都是随机的,那么肯定会以不同的哈希结束?

当服务器检查密码时,它需要访问存储密码时使用的salt。否则,它无法从密码中重新计算存储的值。盐通常就存储在最后的哈希旁边。这个想法是,盐不是秘密,密码是秘密,所以把它放在旁边就可以了。

这就是为什么即使两个用户输入相同的密码,他们最终也会得到不同的哈希值。

是的,每个密码都使用不同的盐存储。每个盐都是随机生成的,但随后与最终的密码哈希一起存储。

 类似资料:
  • 问题内容: 来自github: 哈希密码: 要检查密码: 从上面看,比较中如何不包含盐值?我在这里想念什么? 问题答案: 盐合并到哈希中(以纯文本形式)。比较功能只是将盐从哈希表中提取出来,然后使用它来哈希密码并执行比较。

  • 问题内容: 我想用散列密码,以后再验证提供的密码是否正确。 散列密码很容易: 如何将纯文本密码与存储的哈希值进行比较? 问题答案: 使用py-bcrypt,您不需要单独存储盐:将盐存储在哈希中。 您可以简单地将哈希用作盐,盐将存储在哈希的开头。

  • 每个人在建构 PHP 应用时终究都会加入用户登录的模块。用户的帐号及密码会被储存在数据库中,在登录时用来验证用户。 在存储密码前正确的 哈希密码 是非常重要的。密码的哈希操作是单向不可逆的,该哈希值是一段固定长度的字符串且无法逆向推算出原始密码。这就代表你可以哈希另一串密码,来比较两者是否是同一个密码,但又无需知道原始的密码。如果你不将密码哈希,那么当未授权的第三者进入你的数据库时,所有用户的帐号

  • 我认为我理解散列和加盐密码,但似乎我有一些误解。我在nodejs为我的网站创建一个用户帐户系统。 我的理解是,当用户创建密码时,我们会生成一个随机盐,将其附加到密码中,然后散列该字符串。我们还可以添加一个工作因子以使散列工作缓慢并防御蛮力攻击。我们将盐与散列一起存储在我们的数据库中,为了验证登录尝试,我们使用存储的盐和尝试的密码重复上述过程(在服务器上),并检查散列是否匹配。 nodejs中的模块

  • 我用哈希法通过了一个密码 这将密码作为哈希值存储到数据库中。但是当我试图通过 无论密码是否正确,它都会告诉我密码是正确的。有没有办法解决这个问题,所以我可以散列密码,但登录时输入(非散列)密码。

  • 我是在阅读了一些关于php中会话管理的主题后开始进行安全讨论的,请查看:https://paragonie.com/blog/2015/04/secure-authentication-php-with-long-termer-persistence#title.2 引自章节:胡椒还是不胡椒? 一个更好的解决方案是,在将散列插入数据库之前对其进行加密,如果使用硬件分离,这种解决方案尤其有用。有了这