[mysql]我如何检查数据库中的密码匹配

标签: MySQL PHP
发布时间: 2017/4/9 21:43:46
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

今天我发现一个 php 类称为的 CryptoLib,它可以帮助在哈希密码,但现在我感到迷惑如何我将它与我的数据库密码

这里是如何使用该脚本,这产生不同的哈希,每次我重新加载该页面

$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/

解决方法 1:

你基本上需要比较提供的密码与通过 SELECT 查询数据库中的散列和遍历给定的行,就像你对 PHP 的 password_verify() 函数。

这和在那里你将结果绑定到比较的示例︰

$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");

同时使用预准备语句。为了帮助保护免受可能的SQL 注入你已经目前开放的您应该使用的东西。

此外注意到从我的评论︰

那图书馆返回一个 256 长度的字符串。确保您密码列在您的数据库不是 255 但 256 +,因为那将会对你默默地失败。

你甚至可能喜欢使用 PHP 的 password_hash() 功能相反,然而,选择权完全在你。


Foonotes:

这条线 require_once('cryptolib.php'); 从他们的演示文件可能会引发你的错误如果你在 * NIX 系统。这些都是区分大小写,如果你在那 (而不是 Windows)。他们的文件命名为 CryptoLib.php 并不是相同 cryptolib.php 在某些平台上。

官方微信
官方QQ群
31647020