如何根据散列和加盐密码检查密码?



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

然而,现在的密码是散列和加盐的。所以当用户第一次注册他们的密码时,它会经过一个散列,然后它会被加盐10000次。这个salt是否具有后端代码生成的相同关键字,还是每次盐化时随机生成的?

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

好问题!

所以当用户第一次注册他们的密码时,它会经过一个散列,然后它会被加盐10000次。这个salt是否具有后端代码生成的相同关键字,还是每次盐化时随机生成的?

盐化和散列字的实际机制因实现而异。然而,salt背后的一般思想是为每个存储的密码生成一个称为salt的随机信息片段。然后,存储的值从密码本身的散列中以某种方式与盐混合得到。可能是你对密码进行哈希,然后将哈希值与盐进行多次组合,或者你只是将密码和盐连接在一起并进行多次哈希。

要使此过程有效,必须为每个密码设置不同的盐。如果您每次使用相同的盐,那么在您完成散列并将其与盐组合后,相同密码的每个副本看起来都是相同的。这会泄露信息,这不是一件好事。

当用户输入密码登录时,它是如何匹配哈希值和加盐密码的,如果每次加盐都是随机的,肯定会得到不同的哈希值?

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

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

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

最新更新