SHA512错误登录从数据库中检索密码

时间:2018-05-28 14:51:54

标签: php mysql sha512

好的我有2个脚本。一个用于注册用户,一个用于登录。我是PHP新手,早些时候就在这里,据说我不应该使用MD5。所以这是我尝试以正确的方式做事并从一开始就练习良好的编码习惯。

到目前为止,我可以获取密码哈希并进入数据库,但是当我尝试登录时,它告诉我密码无效。这是我到目前为止的代码。 (请记住,我是新的,我真的很难理解这一点)。

这是登录(我只包括登录的主要部分,我遇到了麻烦。)

     $username = mysqli_real_escape_string($con,$username);
     $password = stripslashes($_REQUEST['password']);
     $password = mysqli_real_escape_string($con,$password);
     $password = hash('sha512',$password);
     //Checking is user existing in the database or not
     $query = "SELECT * FROM `users` WHERE username='$username'
     AND password='".$password."'";
     $result = mysqli_query($con,$query) or die(mysql_error());
     $rows = mysqli_num_rows($result);
     $row = mysqli_fetch_array($result);
     if($rows==1){

这是注册(我也只包括其中的主要部分)

//Strip & Escape PW
$password = stripslashes($_REQUEST['password']);
$password = mysqli_real_escape_string($con,$password);
$sql_u = "SELECT username FROM users WHERE username='$username'";
$sql_e = "SELECT email FROM users WHERE email='$email'";
$res_u = mysqli_query($con, $sql_u);
$res_e = mysqli_query($con, $sql_e);
if (mysqli_num_rows($res_u) > 0) {
$name_error = "Sorry... username already taken";
}
else if(mysqli_num_rows($res_e) > 0){
$email_error = "Sorry... email already taken";
}
else{
$query = "INSERT INTO users (username, email, password)
VALUES ('$username', '$email', '".hash('sha512',$password)."')";
$results = mysqli_query($con, $query);
echo 'You Have Registered Successfully!<br>

顺便说一下,我已经看过这篇文章而且完全迷失了。因此,如果您要将此标记作为本文的重复基础,请您告诉我我缺少的内容,因为我根本不理解这篇文章。谢谢。

Verify a SHA512 password if($row['password']==hash('SHA512', $upass))

(我读过这篇)

1 个答案:

答案 0 :(得分:0)

您不应对密码使用普通的SHA512哈希。这很容易受到彩虹表的影响,因为它不含盐。所以相同的密码是相同的哈希。 更多信息:https://en.wikipedia.org/wiki/Salt_(cryptography)

无论如何,在PHP中有一个自己的哈希密码函数。 使用password_hash()进行注册,使用password_verify()进行登录。该实现使用Blowfish算法。

顺便说一句:也许从mysqli改为PDO,但这很复杂,作为初学者

祝你好运