使用 Password_hash 和 password_verify
Working with Password_hash and password_verify
我是 password_hash
和 password_verify
的新手,它们似乎是安全存储密码的最有效方式!
我注意到 password_hash
为相同的 plain-text
值生成不同的哈希值 every time
!
这意味着如果用户尝试使用密码 (thisIsMyPassword)
创建帐户,它将生成这样的哈希 y$VCNH8ndve8hwbvLJ2nMHtOsEiigE4zA7ViADxCJfq9bmUCmkNkcce
、
并且如果另一个或同一个用户试图使用相同的密码创建另一个帐户,即 (thisIsMyPassword)
将创建该帐户并且密码的哈希值将类似于 y$Hqssc5nn3pzgfwqVwQrQz.Ny71q972RXmCmyV9ykywG8iELbsf47a
!
现在您看到了相同的值,即 (thisIsMyPassword)
产生了不同的哈希值!
这样可以吗?
只要数据库中的密码散列不同,就可以让用户使用相同的密码吗?
密码散列包括一个所谓的salt,一个小的随机值,这是为了防止字典攻击,这里是PHP手册说的:
If omitted, a random salt will be generated by password_hash()
for each password hashed. This is the intended mode of operation.
您作为输出获得的值并不是真正的普通散列,而是一个
字符串由 - algorithm id, salt 和 HASH(password,salt).
The used algorithm, cost and salt are returned as part of the hash.
Therefore, all information that's needed to verify the hash is included.
in it. This allows the password_verify() function to verify the hash
without needing separate storage for the salt or algorithm information.
我是 password_hash
和 password_verify
的新手,它们似乎是安全存储密码的最有效方式!
我注意到 password_hash
为相同的 plain-text
值生成不同的哈希值 every time
!
这意味着如果用户尝试使用密码 (thisIsMyPassword)
创建帐户,它将生成这样的哈希 y$VCNH8ndve8hwbvLJ2nMHtOsEiigE4zA7ViADxCJfq9bmUCmkNkcce
、
并且如果另一个或同一个用户试图使用相同的密码创建另一个帐户,即 (thisIsMyPassword)
将创建该帐户并且密码的哈希值将类似于 y$Hqssc5nn3pzgfwqVwQrQz.Ny71q972RXmCmyV9ykywG8iELbsf47a
!
现在您看到了相同的值,即 (thisIsMyPassword)
产生了不同的哈希值!
这样可以吗?
只要数据库中的密码散列不同,就可以让用户使用相同的密码吗?
密码散列包括一个所谓的salt,一个小的随机值,这是为了防止字典攻击,这里是PHP手册说的:
If omitted, a random salt will be generated by password_hash() for each password hashed. This is the intended mode of operation.
您作为输出获得的值并不是真正的普通散列,而是一个 字符串由 - algorithm id, salt 和 HASH(password,salt).
The used algorithm, cost and salt are returned as part of the hash. Therefore, all information that's needed to verify the hash is included. in it. This allows the password_verify() function to verify the hash without needing separate storage for the salt or algorithm information.