我正在尝试使用$ 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)