以前我用这个
哈希我的密码$password = hash('sha256' , $salt.$password_arr[$i]);
在config.php中,我有这个代码来加密密码
$salt = 'jhfdkjdhfTyhdh3365@jdh69kkshhQAAAiyeg';
所以我的sql数据库在我注册一个新的传递时显示哈希码,我很高兴,但是当我登录时,它似乎无法识别我的密码,因为身份验证是直接从数据库数据进行身份验证。那么我该怎么做才能让它发挥作用
这是我的登录验证代码
<?php
session_start();
include('adminconfig.php');
// username and password sent from form
$username=$_POST['userID'];
$password=$_POST['password'];
// To protect MySQL injection (more detail about MySQL injection)
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$sql="SELECT * FROM admin WHERE ID='$username' and
password='$password'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($result && $count==1){
$_SESSION['userID']= $_POST['userID'];
header('location:adminprofile.php');
}
else {
header('location:adminmessage.php');
die;
}
?>
</body>
</html>
答案 0 :(得分:1)
根据我的理解,您正在散列密码并将其插入数据库。因此,当您尝试使用实际密码登录并签入数据库时,它不匹配。
这是我简单的数学类比。
注册时输入的密码为2。 让我们说当你哈希它时你加3。所以哈希后你的密码是5。 5插入数据库。
现在登录时输入密码为2。 当您检查数据库2不匹配5时,您登录失败。
底线,在从表单验证登录后,哈希密码然后检入数据库,它应该可以工作。
在这些行之间添加哈希函数:
$password=mysql_real_escape_string($password);
$password = hash($password , $salt.$password_arr[$i]);
$sql="SELECT * FROM admin WHERE ID='$username' and password='$password'";
答案 1 :(得分:1)
虽然你说你对你的密码进行哈希和加密,但是在查询数据库之前你似乎忘了这样做,因此你的查询不会返回任何结果。
旁注:
您应该考虑参考以下密码哈希安全性:
How do you use bcrypt for hashing passwords in PHP?
这是为了防止SQL注入攻击:
答案 2 :(得分:1)
为了检查密码是否正确,您需要以与在数据库中存储密码相同的方式对密码尝试进行散列。由于哈希是单向函数,因此无法从哈希中获取“真实”密码。你可以做的是以相同的方式散列新值并查看它是否获得相同的输出。这背后的理论是,没有两个值可以作为哈希函数的输入给出相同的输出值。
您在数据库中存储的内容是hash(real_password + salt)。所以你想看看hash(attempt_password + salt)= database_value。如果匹配,则尝试的密码必须正确并且用户已通过身份验证。
我还建议阅读http://www.php.net/manual/en/book.password.php,因为PHP确实具有处理密码散列的内置功能。</ p>