登录密码不断出现错误PHP、PDO、Salt 登录 请登录 电子邮件 密码

登录密码不断出现错误PHP、PDO、Salt 登录 请登录 电子邮件 密码,php,pdo,login,Php,Pdo,Login,大家好,我正在课堂上学习PHP,我一直在理解这段代码的真正含义。我们需要删除login.php文件中的$stored_散列。目前,我们只有$salt(第12行) 有了这个变化,第34行让我感到困惑。当我将$stored_hash更改为$salt时,我的登录无法正常工作。它总是说“密码不正确”,我甚至不知道这是从哪里来的 有人能解释第12行和第34行吗?我只是希望密码与salt匹配,以便用户可以登录。感谢像我这样的新手提供的任何帮助。哈希是一种单向加密算法,salt所做的只是使反向工程和猜测用户密

大家好,我正在课堂上学习PHP,我一直在理解这段代码的真正含义。我们需要删除login.php文件中的$stored_散列。目前,我们只有$salt(第12行)

有了这个变化,第34行让我感到困惑。当我将$stored_hash更改为$salt时,我的登录无法正常工作。它总是说“密码不正确”,我甚至不知道这是从哪里来的


有人能解释第12行和第34行吗?我只是希望密码与salt匹配,以便用户可以登录。感谢像我这样的新手提供的任何帮助。

哈希是一种单向加密算法,salt所做的只是使反向工程和猜测用户密码变得稍微困难,如果您有权访问数据库。通常,您将用户密码的哈希版本存储在数据库中,然后对用户输入的密码进行哈希,以查看其是否相同。如果是,则密码正确;如果不是,则密码错误。这里要记住的关键是一个散列,只要它每次都使用相同的salt,那么每次都会为给定的字符串创建相同的散列,而不会将failpost代码作为文本,而不是图片。这里的问题是,您没有将散列保存到数据库或会话密钥的任何位置。$check=hash('md5',$salt.$\u POST['pass'])哈希返回一个字符串,不是真或假。您将首先对发布的密码进行散列,然后将其与存储的散列进行比较-您没有使用后一种方法使用
password\u hash()
password\u verify()
<?php
require_once "pdo.php";
session_start();

// Redirect to index.php if use clicks cancel button
if ( isset($_POST['cancel'] ) ) {
    header("Location: index.php");
    return;
}

// salt and hash
$salt = 'XyZzy12*_';

// Check to see if we have some POST data, if we do process it
if ( isset($_POST['email']) && isset($_POST['pass']) ) {

    // Check for email and password
    if ( strlen($_POST['email']) < 1 || strlen($_POST['pass']) < 1 ) {
        //$failure = "Email and password are required";
        $_SESSION['error'] = "Email and password are required";
        header("Location: login.php");
        return;

    // Check for at-sign in email
    } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $_SESSION['error'] = "Email must have an at-sign (@)";
        header("Location: login.php");
        return;

    } else {

        //All looks good, so redirect to index.php
        $check = hash('md5', $salt.$_POST['pass']);
        if ( $check == true) {
            $_SESSION['name'] = $_POST['email'];
            error_log("Login success ".$_POST['email']);
            header("Location: index.php");
            return;
        } else {
            //Else redirect to the login page
            $_SESSION['error'] = "Incorrect Password";
            error_log("Login fail ".$_POST['email']." $check");
            header("Location: login.php");
            return;

        }
    }
}

?>

<!DOCTYPE html>
<html>
<head>
    <?php require_once "bootstrap.php"; ?>
    <title>Login</title>
</head>
<body>
    <div class="container">

        <br /><br />

        <?php

        // Message View of Errors
        if ( isset($_SESSION['error']) ) {
            echo('<p style="color: red;">'.htmlentities($_SESSION['error'])."</p>\n");
            unset($_SESSION['error']);
        }

        ?>

        <h1>Please Log In</h1>

        <form method="POST">
            <label for="name">Email</label>
            <input type="text" name="email" id="name"><br/>
            <label for="id_1723">Password</label>
            <input type="password" name="pass" id="id_1723"><br/>
            <input type="submit" onclick="return doValidate();" value="Log In">
            <input type="submit" name="cancel" value="Cancel">
        </form>