php - 如何使用 crypt() 和我的盐生成相同的加密数据库密码字符串值?

标签 php mysql encryption crypt

如果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/

相关文章:

php - 在包含 PHP 脚本时传递参数

MySql 获取余额查询

python - 使用 AES-256 和 PKCS7 填充进行加密

mysql - 使用 R 将字符向量转换为字符串(带引号和逗号)

c# - 使用 File.Encrypt 加密文件,然后将其解密到内存流

ruby - 使用 Ruby OpenSSL 验证非散列数据的签名

php - JOIN 中重复的 SQL 结果 - Codeigniter

php - 创建自定义 WP 查询

php - Mysql更新但保留旧数据?

mysql - 使用bash导出sql记录