PHP SHA256和Salt不起作用

sko*_*ind 2 php sha256

我正在尝试使用$ salt变量创建sha256哈希值的密码.但由于某种原因它只是不起作用.现在已经工作了3个小时,我即将扯下头来.这是我的代码:

我会再试一次,抱歉; o)

好吧,我的脚本工作正常,直到我尝试将sha256添加到密码.我有一个用于创建用户的文件,它是:

$salt = "lollol";  
$password = hash('sha256', $salt.$_POST['password']);  
$sql = ("INSERT INTO members (username, password, name, last_name,company)VALUES('$username', '$password', '$name', '$last_name', '$company')")or die(mysql_error());

if(mysql_query($sql))
    echo "Your accuont has been created.";
Run Code Online (Sandbox Code Playgroud)

它似乎正确地添加到数据库中.我可以看到它正在用一些字母和数字进行哈希处理.

但是当我尝试登录时,它就不会.

我的login.php代码是:

$sql= "SELECT * FROM members WHERE username='$username' and password='$password'";  
$result=mysql_query($sql);    
$row=mysql_fetch_array($result);  
$username = mysql_real_escape_string($_POST['username']);  
$password = $_POST['password'];  
$salt = "lollol";  
$auth_user = hash('sha256', $salt.$password);  
if($password == $salt.$auth_user){  
    echo "Logged in";  
} else {  
    echo "Not logged in";  
}  
Run Code Online (Sandbox Code Playgroud)

我明白了,当我想登录时我必须加密密码,但我不确定.我希望你们中的一些人可以帮助我.

Kin*_*nch 10

尝试登录时,再次将哈希与salt连接起来

$auth_user = hash('sha256', $salt.$password);
if($password == $salt.$auth_user){ // <-- $salt once more
  echo "Logged in";
} else {
  echo "Not logged in";
}
Run Code Online (Sandbox Code Playgroud)

它应该工作,如果你只是删除它

$auth_user = hash('sha256', $salt.$password);
if($password == $auth_user){
  echo "Logged in";
} else {
  echo "Not logged in";
}
Run Code Online (Sandbox Code Playgroud)

更新:走得更远

这里

$sql= "SELECT * FROM members WHERE username='$username' and password='$password'";
Run Code Online (Sandbox Code Playgroud)

您尝试检索用户名匹配$username且密码匹配的行$password.在数据库中,密码已经被散列(并且$password似乎根本没有定义),因此该查询将永远不会返回任何行.

$password = hash('sha256', $salt.$_POST['password']);
$username = mysql_real_escape_string($_POST['username']);
$sql= "SELECT * FROM members WHERE username='$username' and password='$password'";
$result=mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)

$result现在应该包含与给定凭据匹配的唯一用户.它现在很容易

if (mysql_num_rows($result) === 1) {
  echo "Logged in";
} else {
  echo "Not logged in";
}
Run Code Online (Sandbox Code Playgroud)