2014-10-26 94 views
0

我使用crypt对用户密码进行哈希处理,并在用户在我的应用程序中注册时将哈希密码存储到我的数据库中。 然后,当用户在我的应用程序中登录时,我从我的数据库中检索加密的密码,并将新的哈希密码与初始哈希密码进行比较。 我的问题是我从来没有得到同样的价值。 我读了使用初始密码盐以提高安全性。 我的代码如下:使用crypt值检索用户密码

$sql = "SELECT password FROM users WHERE mail =:mail"; 
    $sth = $dbh->prepare($sql); 
    $sth->execute(array(':mail'=>$mail)); 
    $result = $sth->fetchAll(PDO::FETCH_ASSOC); 
    if (count($result) == 1){ 
     $interne = $result[0]['password']; 
     $crypt = crypt($pass, $interne); 
     if($interne === $crypt){ 
     echo "loggedin"; 
     } 

回答

1

尝试使用varchar存储散列,因为char可能被填充了空格。

这是例如用于MySql的情况下:

当存储CHAR值,它们是右填充空格以指定的长度。

-1

你可能不允许这份厚礼地方在数据库中的完整的哈希值。你有没有像这样设置varchar 40或somethinng?如果是允许255 varchar,它应该可以工作

+0

是的,我做了密码=字符(255) – 2014-10-26 17:19:08