请原谅我,我对密码安全和加密完全陌生......
我在比较使用 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/