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

时间:2015-04-30 05:29:04

标签: php mysql login-page

我正在尝试使用来自MySQL数据库的用户名和密码登录PHP,这些用户名和密码保存了userID,用户名和hashed_pa​​sswords(我之前使用注册表单创建的,而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 :(得分: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;";

答案 1 :(得分:0)

在插入用户密码期间,“apple”使用md5加密,因此输出喜欢“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 );
}

答案 2 :(得分: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");
}




答案 3 :(得分: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注入,因为上面的代码容易受到攻击。