首页 文章

使用MySQL数据和哈希密码登录PHP

提问于
浏览
0

我正在尝试使用来自MySQL数据库的用户名和密码登录PHP,该数据库保存了userID,用户名和hashed_passwords(我之前使用注册表单创建,md5哈希的salt是:2155) .

问题是我无法将密码加密而无法使用它进行登录 .

而且我不确定这是否是如何编码查询以根据用户输入从数据库中查找用户名和密码 .

$sql = "SELECT * FROM user where username = '$_POST["username"]' AND password = '$_POST["password"]";
$rows = $conn->query($sql);

        if ($userID > 0){
                    echo "Hello World";
            header("Location: login_success.php");
        }

        else{
                        echo "Unsuccessful";
            header("Location: index.php");
        }

4 回答

  • 0

    如果,当您在表中插入用户记录时,您使用了md5加密,那么您的SQL将遵循:

    $sql = "INSERT INTO `tblUsers` (`username`, `userpassword`) VALUES ('myusernameis', md5('mysecretpass'));";
    

    这意味着当您检索该记录以进行身份验证(登录)时,您将使用以下内容:

    $sql = "SELECT * FROM `tblUsers` WHERE `username` = 'myusernameis' AND `userpassword` = md5('mysecretpass') LIMIT 1;";
    
  • 0

    在插入用户密码期间,“apple”使用md5进行加密,因此out put喜欢“gjdg $ fdfjd”并存储在数据库中,在登录表单中,您正在检查“apple”是否等于“gjdg $ fdfjd”,因此您需要验证错误以解决此问题为用户密码验证添加相同的加密

    $sql = "SELECT * FROM user where username = '$_POST["username"]' AND password = 'md5($_POST["password"])";
    

    但是你不能在没有尝试像暴力破解这样资源密集,不实用和不道德的情况下解密MD5 . 所以使用一些像这样的加密和解密函数

    function encrypt( $q ) {
        $cryptKey  = 'fdf';
        $qEncoded      = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), $q, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );
        return( $qEncoded );
    }
    
    function decrypt( $q ) {
        $cryptKey  = 'fdf';
        $qDecoded      = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), base64_decode( $q ), MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ), "\0");
        return( $qDecoded );
    }
    
  • 0

    我是中国人 . 你的代码有一些错误;用户写密码的地方,你需要mad5(密码)

    $password = mad5($_post['password'])
    
    $user = $_post['user'];
    $sql = "select * from user where username = $user ";
    $rows = $conn->query($sql);
    if($rows['password'] ===$password  )
    {
     echo "success";
     header("Location: login_success.php");
    }else{
    echo "unsuccessful";
    header("Location: index.php");
    }
    
  • 0

    而不是使用MD5或尝试解密密码 - 正如其他人在此建议的那样 - 只需使用PHP的本机password_hash()函数,该函数会自动检查密码是否正确 .

    像这样加密密码:

    $unencrypted_password = 'secret!'; 
    $encrypted_password = password_hash($unencrypted_password,  PASSWORD_DEFAULT);
    

    然后插入您的数据库,如下所示:

    INSERT INTO users (encrypted_password, username) VALUES ($encrypted_password, $username);
    

    如果要检查密码是否正确,请从数据库中选择密码:

    SELECT encrypted_password FROM users WHERE username = $username;

    最后,使用passoword_verify()检查密码是否正确:

    $correct = password_verify($unecnrypted_password, $encrypted_password);
    if($correct == true) {
        echo 'correct password!';
    } else {
        echo 'password incorrect!';
    }
    

    注意防止SQL注入,因为上面的代码容易受到攻击 .

相关问题