0

问题已解决。感谢所有发帖并帮助我的人。列类型很短 (varchar(25)) - 我扩展了它并能够登录。每个人的意见都受到赞赏。

当我尝试使用我创建的测试帐户登录时遇到了一些问题。我正在尝试制作自己的 CMS。现在我已经完成了注册页面并在登录页面上工作。我在注册时有 MD5 的用户密码。当我尝试使用此帐户登录时,登录页面上生成的哈希永远不会与存储在我的 SQL 数据库中的哈希匹配。

这是我的 PHP 代码和 MySQL 查询:

$username = mysql_real_escape_string($_REQUEST['username']);
$password = mysql_real_escape_string($_REQUEST['password']);

$query = mysql_query("SELECT username FROM records WHERE username='".$username."'") or die(mysql_error());  
$result= mysql_fetch_array( $query );

if($result[0] == $username) {

        $query = mysql_query("SELECT password FROM records WHERE username='".$username."'") or die(mysql_error());
        $result = mysql_fetch_array( $query );
        $passHash = md5($password);

        echo "Hash: ".$passHash."<br/>";
        echo "User's hash: ".$result[0];

        if($result[0] == $passHash) {
            echo "XXXXX: WIN";
        }
        else {
           echo "fail";
        }

我有一个名为“alex”的帐户,在注册页面上生成的 MD5 是“1c13465e24d91aca4d3ddaa1b”,在登录页面上生成的 MD5 哈希是“1c13465e24d91aca4d3ddaa1bc3e7027”

这是我的注册页面代码:

$username = mysql_real_escape_string($_REQUEST['username']);
$password = mysql_real_escape_string($_REQUEST['password']);
$md5_pass = md5($password);
mysql_real_escape_string(mysql_query("INSERT INTO records (username, password, ) VALUES('$username', '$md5_pass' ) ") or die(mysql_error()));  

我究竟做错了什么?我一直在这里搜索并查看:

使用 php 和 mysql 进行 md5 哈希登录

但没有运气。任何帮助是极大的赞赏!

4

2 回答 2

4

很可能存储密码哈希的列太短,例如VARCHAR(25).
使其更大:CHAR(32)BINARY(16).
也可以看看:

于 2012-05-28T08:21:43.887 回答
1

首先,使用单个 SELECT 语句来获取您的用户数据:

$query = mysql_query("SELECT username FROM records WHERE username='".$username."' AND password='".md5($password)."'") or die(mysql_error());  

第二点——不要使用 mysql_* 函数——它们已经过时了。切换到 PDO 或 MySQLi。

您的数据库通行证中可能有空间...

于 2012-05-28T08:20:34.733 回答