php - 我如何检查数据库中的密码是否匹配?

标签 php mysql hash password-encryption

今天我发现了一个名为 CryptoLib 的 php 类,它有助于散列密码,但现在我很困惑如何将它与我的数据库密码相匹配。

这是脚本的使用方式,每次我重新加载页面时都会生成不同的哈希值

$string = $_POST['password'];
echo $hash = CryptoLib::hash($string);

上面这行检查哈希是否匹配

$isHashCorrect = CryptoLib::validateHash($hash, $string);
echo ($isHashCorrect ? "TRUE" : "FALSE");

这是我的查询

mysqli_query($connec, "SELECT * FROM users WHERE email='$email' AND password='$password'");

现在有人可以告诉我如何匹配密码吗?

欲了解更多信息,请访问 https://cryptolib.ju.je/

最佳答案

您基本上需要通过 SELECT 查询将提供的密码与数据库中的哈希值进行比较,并遍历给定的行,就像您对 PHP 的 password_verify() 所做的那样。功能。

这方面的示例以及将结果绑定(bind)到比较的位置:

$username = "email@example.com";
$password = "pass";

    if ($stmt = $con->prepare("SELECT `password` FROM `table` WHERE email = ? ")) {

        $stmt -> bind_param("s", $username);

        /* Execute it */
        $stmt -> execute();

        /* Bind results */
        $stmt -> bind_result($result);

        /* Fetch the value */
        $stmt -> fetch();

        /* Close statement */
        $stmt -> close();
    }

$isHashCorrect = CryptoLib::validateHash($result, $password);
echo ($isHashCorrect ? "TRUE" : "FALSE");

同时使用 prepared statement .你应该使用的东西来帮助防止可能的 SQL injection您目前对此持开放态度。

同时从我的评论中注意到:

该库返回一个 256 长度的字符串。确保您数据库中的密码列不是 255,而是 256+,因为这会无声对您造成影响。

您甚至可能喜欢使用 PHP 的 password_hash()相反,这个选择完全是你的。


脚注:

如果您使用的是 *NIX 系统,他们的演示文件中的这一行 require_once('cryptolib.php'); 可能会给您带来错误。如果您使用的是(而不是 Windows),则这些是区分大小写的。他们的文件名为 CryptoLib.php,在某些平台上与 cryptolib.php 不同。

关于php - 我如何检查数据库中的密码是否匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37778903/

相关文章:

php - 如何同时提交多个回复(问卷工具)

java - 将字符串转换为 Sha-256 哈希值

Php 准备好的语句关闭仿真

php - "ajax() call to pass the address into database"?

mysql - MySQL Cluster 7.3 如何实现 99,999% 的可用性? CAP定理的对立面

来自 MySql 命令行的 MySql 'INTO OUTFILE '

c++ - C++ 中的哈希表实现 - 如何返回具有特定值的键

java - 我应该如何使用 google guava hashCode() 调用 super.hashcode

php - 在 WooCommerce 结账时在 "Place Order"按钮下添加文本

php - 国家、州和城市名称显示第一个表中的正确名称,但也显示第二个表中的相同详细信息