【发布时间】:2017-11-23 13:33:50
【问题描述】:
我使用 PHP 的 password_hash 和 bcrypt 算法来散列我的密码。它们在 MySQL 数据库中。
password_hash($password, PASSWORD_BCRYPT);
很明显,这个函数生成的每个哈希值都是不同的。但是真的有必要通过电子邮件/登录或其他方式识别用户以从数据库中获取他的哈希值,然后使用 PHP 的password_verify() 进行验证吗?
真的有必要做这个查询然后检查吗?
我的意思是,是否可以在之前和之后检查哈希以检查它是否与 MySQL 中的这个匹配?
或者别的什么?我记得几年前我用过类似检查内部查询的东西,比如
WHERE login = $login and pass = PASSWORD($password)
特别是我的意思是PASSWORD($password)?
除了从数据库中获取用户的哈希值,然后使用password_verify() 验证此哈希值之外,还有其他选择吗?
【问题讨论】:
-
无论如何,您都必须深入研究数据库。我不确定您如何想象 any 解决方案不会在这里涉及数据库调用。您的“检查哈希之前”会检查什么反对?
-
@cee 好吧,在“传统”MD5 哈希或类似的“之前检查”(星号、星号、脚注、警告……)。
-
@deceze 您可以在使用 MD5 查询之前计算哈希值,但您仍然需要执行查询以查看哈希值是否与您的文件匹配。
-
否,选择使用其他列匹配,然后使用
password_verify('plain text', $hashed_from_db);测试密码