php - 将 crypt() salt 存储在数据库中以进行密码比较是否安全

标签 php encryption passwords blowfish crypt

请原谅我,我对密码安全和加密完全陌生......

我在比较使用 php 的 crypt() 函数(使用 blowfish hasing 方法)加密的存储密码与用户输入时遇到问题。我发现可以比较密码的一种方法是存储加密期间使用的盐,然后加密用户输入并将其与存储的密码进行比较。

这是一种安全的做事方式吗?还是有更好(更安全)的方法?

谢谢。

最佳答案

PHP 生成散列的函数会将盐包含在生成的散列值中。所以如果你存储这个散列值,你就已经存储了盐。验证函数只需提取此盐并再次使用它进行验证即可。这种方法是安全的,盐不是 secret 。

PHP 5.5 版将内置对 BCrypt 的支持,函数 password_hash()和 password_verify()。实际上,这些只是函数 crypt() 的包装器,将使它更容易正确使用。它负责生成安全的随机盐,并提供良好的默认值。对于 PHP 5.3.7 及更高版本,存在一个 compatibility pack .

使用此功能的最简单方法是:

$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

关于php - 将 crypt() salt 存储在数据库中以进行密码比较是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17034150/

相关文章:

php - 从文件夹中检索上传的图像以及表格行中的数据

php - 我如何发送一个带有变量的http GET请求,该变量在使用php链接点击后增加/减少

java - Spring 安全: Simple Encryption/decryption not working: InvalidKeyException

PHP PDO MySQL 密码验证问题

php - 如何正确地将数据插入到两个表中,其中一个表具有到另一个表的外键?

php - 使用 PDO 从数据库中获取单个单元格

asp.net - 创建 RSA key 容器有时有效有时无效

c++ - 如何在 Qt/C++ 中存储加密设置?

PHP ini 显示错误

java - 如何使输入到 jTextField 中的任何数字出现在 x 中?