php无法登录

时间:2011-10-29 17:24:39

标签: php mysql hash login

我有这组代码

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

function sha512($str) { return hash("sha512", $str); }
$pass = sha512($pass);

$tzlogin = sprintf("SELECT * FROM users WHERE user='%s' AND pass='%s'",
mysql_real_escape_string($user), mysql_real_escape_string($pass));

$tzlogged = mysql_query($tzlogin, $config) or die(mysql_error());

if (mysql_num_rows($tzlogged) == 0){
    header (sprintf("Location: ./login.php?status=error"));
} else {
    if (isset($_POST['tz-remember'])){
        $query = mysql_query("SELECT uid FROM users WHERE user='".$user."'", $config);
        $id = mysql_fetch_row($query);
        foreach($id as $uid){
            setcookie('uid', $uid, time() + 60*60*24*30*11, '/', '.localhost');
        }
        header (sprintf("Location: ./index.php"));
    } else {
        $query = mysql_query("SELECT uid FROM users WHERE user='".$user."'", $config);
        $id = mysql_fetch_row($query);
        foreach($id as $uid){
            $_SESSION['uid'] = $uid;
        }
        header (sprintf("Location: ./index.php"));
    }
}

这一切都是正确的我认为因为早些时候我能够正确登录但突然间我不是将密码加密成哈希格式,同时注册和登录时我再次加密它然后选择当我仔细查看插入的数据在数据库中缺少一些行,而输入的数据有点长,就像我输入密码测试现在插入的数据是

“ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732”

发布的数据为

“ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff”为什么会这样?

3 个答案:

答案 0 :(得分:2)

SHA-512生成一个512位散列值,可以用CHAR(128)表示。

您可以在此处查看其他类型的sha:What data type to use for hashed password field and what length?

答案 1 :(得分:1)

您的数据库字段设置为100个字符。将长度增加到128。

答案 2 :(得分:0)

看起来数据库中的密码字段太短了。

请发布SHOW CREATE TABLE users的结果。