如果crypt()
每次都会生成不同的字符串,我到底应该如何将提供的密码和盐组合为数据库中相同的加密密码?
我想我可以为 crypt() 方法生成一个随机盐,以与用户提供的输入(id est crypt(@_POST['password'],$salt)
)相结合来加密密码。这会为我的数据库生成一个加密密码。我还存储了 $salt
在我的数据库中 salt
柱子。
我想我可以打电话crypt($_POST['providedPassword'],$saltStoredInDatabaseFromRegistrationTime)
返回与我从注册表中存储在数据库中的密码相同的加密值,但事实证明 crypt()
每次调用它时都会返回不同的值。
我应该如何得到与数据库中的密码相同的加密值?
最佳答案
crypt()
的工作方式如下:
// to create
$hash = crypt($password, $salt);
// to verify
if (crypt($password, $hash) == $hash) {
// yay!
}
不完全一样; crypt()
有多种哈希算法,它可以返回无效的哈希值来指示错误。最后,您应该使用不易受到定时攻击的比较函数来比较哈希值,例如新的 hash_equals()
注意:每次使用 crypt()
进行哈希处理时,始终生成新的盐非常重要。
也就是说,从 PHP 5.5 开始,您应该使用 password_hash()
对密码进行哈希处理。和 password_verify()
;对于早期版本,您可以使用 password_compat图书馆。
关于php - 如何使用 crypt() 和我的盐生成相同的加密数据库密码字符串值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27558710/