我如何检查数据库中的密码是否匹配?
How do i check for a match for password in database?
今天我发现了一个名为 CryptoLib 的 php class,它有助于散列密码,但现在我很困惑如何将它与我的数据库密码相匹配。
这是脚本的使用方式,每次重新加载页面时都会生成不同的哈希值
$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()
函数。
此示例以及将结果绑定到比较的位置:
$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. Something you should use in order to help protect against a possible SQL injection。
还注意到我的评论:
那个库returns一个256长度的字符串。确保你的数据库中的密码列不是 255,而是 256+,因为这对你来说 silently.
您甚至可能喜欢使用 PHP 的 password_hash()
函数,但这个选择完全由您决定。
脚注:
如果您使用的是 *NIX 系统,他们的演示文件中的这一行 require_once('cryptolib.php');
可能会给您带来错误。如果你在上面(而不是 Windows),它们是区分大小写的。他们的文件名为 CryptoLib.php
,在某些平台上与 cryptolib.php
不同。
今天我发现了一个名为 CryptoLib 的 php class,它有助于散列密码,但现在我很困惑如何将它与我的数据库密码相匹配。
这是脚本的使用方式,每次重新加载页面时都会生成不同的哈希值
$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()
函数。
此示例以及将结果绑定到比较的位置:
$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. Something you should use in order to help protect against a possible SQL injection。
还注意到我的评论:
那个库returns一个256长度的字符串。确保你的数据库中的密码列不是 255,而是 256+,因为这对你来说 silently.
您甚至可能喜欢使用 PHP 的 password_hash()
函数,但这个选择完全由您决定。
脚注:
如果您使用的是 *NIX 系统,他们的演示文件中的这一行 require_once('cryptolib.php');
可能会给您带来错误。如果你在上面(而不是 Windows),它们是区分大小写的。他们的文件名为 CryptoLib.php
,在某些平台上与 cryptolib.php
不同。