【发布时间】:2018-08-16 18:07:11
【问题描述】:
我正在做一个项目,其中用户名和密码都需要使用 Argon2 进行哈希处理。我在注册和将它们插入数据库时都没有遇到任何问题,但我无法提取登录信息。这是我的登录脚本:
<?php session_start(); ?>
<?php
include 'config.php';
if(isset($_POST['submit'])){
$submittedUser = $_POST['username'];
$submittedPass = $_POST['password'];
$encrypteduser = password_hash($submittedUser, PASSWORD_ARGON2I);
$con=mysqli_connect($servername, $dbusername, $dbpassword, $dbname);
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if ($stmt = mysqli_prepare($con, "SELECT * FROM users Where username =?")) {
mysqli_stmt_bind_param($stmt, "s", $encrypteduser);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
}
while($row = mysqli_fetch_array($result))
{
$username = $row['username'];
$password = $row['password'];
}
if (password_verify($submittedUser, $username) && password_verify($submittedPass, $password))
{
$_SESSION['user']=$username;
echo "<script> location.href='index.php'; </script>";
exit;
}
else
{
echo "<script> location.href='login.php'; </script>";
exit;
}
mysqli_close($con);
}
?>
我目前的理论是生成并存储在$encrypteduser 中的哈希与数据库中的不匹配。这可以解释为什么没有结果被拉出来。有没有办法解决这个问题?
【问题讨论】:
-
password_hash 每次都会生成一个新的盐,所以它不会匹配,为什么需要对用户名进行哈希处理?您可以使用 sha 之类的摘要哈希,或者对其进行加密并使用 sql 中的 aes 函数。但保护用户名是 ott imo
-
你到底为什么要散列用户名?
-
@LawrenceCherone Jynx..
-
@FunkFortyNiner 谢谢。看起来我现在最终会以纯文本形式保留它们。
-
@EvanEdwards 不客气,埃文。顺便说一句,我之前确实尝试过类似的东西。这是可能的,但有点棘手。我只是不知道我写的剧本在哪里lol!已经好几年了。
标签: php mysql mysqli php-password-hash