php无法登录

标签 php mysql hash authentication

我有这套代码

$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 “为什么会这样?

最佳答案

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

你可以在这里看到其他类型的煞:What data type to use for hashed password field and what length?

关于php无法登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940466/

相关文章:

c# - 比 SHA1 更好的散列

PHP Search_Array使用通配符

php - 如何将变量作为标准输入从 PHP 传递到命令行

php - AJAX 调用的自定义 PHP 错误

php - mysqli_error "doesn' t 有默认值”

mysql - 用于在一个查询中获取总工作时间和加类时间的 SQL 查询 - 生成包含所有用户数据的结果集

javascript - Ajax 成功中 Laravel Route 的多个参数

mysql - 如何在MySQL中的每个其他订单子(monad)句之间按指定行排序时进行多次排序?

php - 用于散列 8-16 字节字符串的非常快的散列函数

hash - 没有小写字母的二进制到文本编码(Base64)?