Passwords 检查加密密码是否与输入密码匹配-PHP/MySQL

Passwords 检查加密密码是否与输入密码匹配-PHP/MySQL,passwords,crypt,Passwords,Crypt,所以基本上我要做的就是在登录提交时验证密码匹配。但它失败了。。。注册时,我使用crypt()加密用户密码,它将毫无问题地存储到数据库中 我的数据库有一个表users,其中有6行ID/姓名/姓氏/登录名/密码/电子邮件 在登录提交时,我通过登录检查用户是否存在,它是否成功,然后检查密码,这里是它失败的地方,我不知道问题出在哪里,因为我在另一台服务器上测试了此脚本一次,它工作了…神奇发生了。。。任何帮助都将不胜感激,可能是我可以优化的东西,或者是我在复制/粘贴另一个文件中的代码时出错了,而我看不到它

所以基本上我要做的就是在登录提交时验证密码匹配。但它失败了。。。注册时,我使用crypt()加密用户密码,它将毫无问题地存储到数据库中

我的数据库有一个表users,其中有6行ID/姓名/姓氏/登录名/密码/电子邮件

在登录提交时,我通过登录检查用户是否存在,它是否成功,然后检查密码,这里是它失败的地方,我不知道问题出在哪里,因为我在另一台服务器上测试了此脚本一次,它工作了…神奇发生了。。。任何帮助都将不胜感激,可能是我可以优化的东西,或者是我在复制/粘贴另一个文件中的代码时出错了,而我看不到它

login.php

 <?php
    session_start();

    require ('./include/connect.php');

    if(isset($_POST['logBtn']))
    {
        $login = mysqli_real_escape_string($connect, $_POST['login']);
        $pass = mysqli_real_escape_string($connect, $_POST['pass']);

        $sql = "SELECT * FROM `users` WHERE `Login` = '".$login."'";
        $result = mysqli_query($connect, $sql);
        $row = $result->fetch_array();

        $db_pass = $row['Password'];
        $hashed_pass = crypt($pass, $db_pass);

        if($result->num_rows > 0)
        {   
            if($hashed_pass == $db_pass)
            {
                echo "<script>alert('You have successfully logged in!')</script>";
                echo "<script>window.open('welcome.php','_self')</script>";
                $_SESSION['user'] = $login;
            }

            else
            {
                echo "<script>alert('Wrong login or password!')</script>";
            }
        }

        else
        {
            echo "<script>alert('No users with such login found in the database!')</script>";
        }
    }

    mysqli_close($connect);
?>

<!DOCTYPE html>

<html>
<body>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Login</title>

<link rel="stylesheet" type="text/css" href="css/style.css">
<script src="./scripts/go_back.js"></script>
</head>

<div class="login">
    <form action="login.php" align="center" method="post">
        <br>
        <input type="text" name="login" placeholder="Login" required oninvalid="this.setCustomValidity('Enter login!')" oninput="setCustomValidity('')" />
        <br><br>
        <input type="password" name="pass" placeholder="Password" required oninvalid="this.setCustomValidity('Enter password!')" oninput="setCustomValidity('')" />
        <br><br>
        <button class="back_btn" onclick="goBack()">Go back</button> 

        <input class="login_btn" type="submit" name="logBtn" value="Log In">
        <br><br>
    </form>
    <a href="register.php"><button class="no_acc_btn">I do not have an account</button></a>
</div>

</body>
</html>

让数据库执行此操作:

SELECT COUNT(*) FROM USERS WHERE LGIJ = ? AND PASSWORD = f(?)
其中
f()
是用于存储密码的数据库函数。如果结果为1,则存在这样一个用户:如果为零,则没有


但不要加密密码。为什么不呢。使用哈希函数和salt。

这需要逐步调试,而不是询问堆栈溢出问题。系统可能不支持您使用的算法。请尝试放置
echo“$hashd_pass | |$db_pass”并查看它们之间的差异。是的,$hashed\u pass!=$好的,我解决了问题。密码行的长度不足以存储哈希密码。