我有哈希密码,但是当我登录时,它无法识别

时间:2013-08-14 02:02:08

标签: php sql

以前我用这个

哈希我的密码
$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>

3 个答案:

答案 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注入攻击:

How can I prevent SQL injection in PHP?

答案 2 :(得分:1)

为了检查密码是否正确,您需要以与在数据库中存储密码相同的方式对密码尝试进行散列。由于哈希是单向函数,因此无法从哈希中获取“真实”密码。你可以做的是以相同的方式散列新值并查看它是否获得相同的输出。这背后的理论是,没有两个值可以作为哈希函数的输入给出相同的输出值。

您在数据库中存储的内容是hash(real_password + salt)。所以你想看看hash(attempt_password + salt)= database_value。如果匹配,则尝试的密码必须正确并且用户已通过身份验证。

我还建议阅读http://www.php.net/manual/en/book.password.php,因为PHP确实具有处理密码散列的内置功能。<​​/ p>

相关问题