密码不匹配

时间:2013-12-28 19:49:13

标签: php

我正在切换到PDO并试图让我在MySQL数据库中的密码更安全,但不幸的是我遇到了一些问题。

当用户注册时,其密码将被视为如下: $pass = sha1($_POST['pass']);

当用户登录时,他们提供的密码处理完全相同($pass = sha1($_POST['pass'];

然后我想比较两者,如果它们匹配,则用户登录。难点是,即使我输入相同的密码 - 例如“密码” - 加密密码放入数据库注册时与用户尝试登录时的密码加密不匹配。

有谁知道这个问题可能是什么?

完整代码:     

$user = $_POST['user'];
$pass = sha1($_POST['pass']);

echo $pass; // This was just to check the two passwords

$db = new PDO('this is all correct');

$query = $db->prepare('SELECT pass, id FROM users WHERE user=:user');
$query->bindParam(':user',$user);
$query->execute();

$result = $query->fetch();
$storedpass = $result['pass'];
$storedid = $result['id'];

if($storedpass === $pass) {
    header("Location: index.php");
}
else {
    echo "Something went wrong";
}

2 个答案:

答案 0 :(得分:1)

sha1不应用于哈希密码。请参阅notice in the docs。您应该使用新的password_hash函数,然后由password_verify为您处理匹配。

切换到new hashing functions可能会解决您的密码验证问题,同时使您的应用更加安全。

如果您的PHP版本低于5.5,则新功能不可用。 Github https://github.com/ircmaxell/password_compat上提供了PHP 5.3.7+的版本。

答案 1 :(得分:0)

你做这样的事情实际上要好得多:

$user = $_POST['user'];
$pass = sha1($_POST['pass']);

echo $pass; // This was just to check the two passwords

$db = new PDO('this is all correct');

$query= $db->prepare("SELECT id FROM users where user=:user AND pass=:pass");
$query->execute(array(':user' => $user, ':pass' => $pass));
if ($query->rowcount() == 1){
    // authenticated
}else{
    // not authenticated
}

不知道这是否能解决您的问题。