首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >md5密码检索

问md5密码检索
EN

Stack Overflow用户
提问于 2012-01-03 18:40:26
回答 2查看 21.3K关注 0票数 0

我做了注册表和登录表。

我首先使用trim(),然后使用md5()将密码存储在数据库中。

我用同样的方法在登录表单中检查了数据库中的密码,但由于某些未知的原因,我无法匹配登录表单中的md5密码。

我只想从数据库里找回密码。

问题是,当我将它存储在数据库中并在php myadmin中检查它时,md5密码类似于123456789,而当我在登录表单中回显它时,它给出了这个1234567890。如果最后为零,则会产生问题,否则将匹配整个md5密码。我的数据库排序规则是latin_1_swedish_ci。

是否存在排序问题?

我使用了varchar值255,然后使用text等,但没有解决方案。

格式或结构有问题吗?

请帮我找回正确的md5密码,消除不需要的零。

代码语言:javascript
复制
function login()

    {
        if(isset($_POST['login']))
        {
            if(!$_POST['username'] || !$_POST['password'])
                {die (mysql_error());}

            else
            {
                $username = trim($_POST['username']);
                $username = addslashes($_POST['username']);

                $password = trim($_POST['password']);
                $password = md5($_POST['password']);
                echo $password;


                $check_username = mysql_query("SELECT * FROM users WHERE username = '".$username."'")or die(mysql_error());
                $check_username2 = mysql_num_rows($check_username);

                if ($check_username2 == 0)
                    {die ("Username and password doesnt exist");}
                else 
                    {
                        $check_pass = mysql_query("SELECT * FROM users WHERE username = '".$password."'")or die(mysql_error());
                        $check_pass2 = mysql_num_rows($check_pass); 
                        echo $check_pass2;
                    }


            }
        }
    }

和

代码语言:javascript
复制
function register()

    {
        if(isset($_POST['submit']))
        {
            if(!$_POST['first_name'] || !$_POST['last_name'] || !$_POST['username'] || !$_POST['password'])
                {header ("Location:user_registration.php");}

            else
                {
                    $firstname = trim($_POST['first_name']);
                    $firstname = addslashes($_POST['first_name']);
                    $lastname = trim($_POST['last_name']);
                    $lastname = addslashes($_POST['last_name']);
                    $username = trim($_POST['username']);
                    $username = addslashes($_POST['username']);
                    $password = trim($_POST['password']);
                    $password = md5($_POST['password']);

                    connect();

                    if($mysql_check_user = mysql_query("SELECT * FROM  `users` WHERE  `username` LIKE  '$username' "))
                        {
                            $check_row = mysql_num_rows($mysql_check_user);
                            if($check_row > 0)
                            die ("username Exist");
                            else 
                                {
                                    $store = mysql_query
                                            ("INSERT INTO `project_upload`.`users` 
                                            (`id`, `fname`, `lname`, `username`, `password`) 
                                     VALUES (NULL, '$firstname', '$lastname', '$username', '$password')");

                                }
                            if ($store)
                                {echo "You have regstered succesfully. please go to <a href = 'uploads_login.php'>login page</a>";                                          }   
                            else {echo mysql_error();}

                        }
                }
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-04 02:14:26

正如我所看到的,你遇到的问题是,你在登录代码的开头有:echo $password;,然后是echo $check_pass_2;,这会导致一个字符串在浏览器中看起来像0,然后就会出现。这是因为$check_pass_2只计算了mysql查询返回的行数,这是0,因为没有用户名和密码相同的用户。所以你真正的问题是mysql-query,它检查是否有一个用户名与某人输入的密码相同的用户,这很奇怪。尝试将login.php中的最后一个查询更改为:

代码语言:javascript
复制
 $check_pass = mysql_query("SELECT * FROM users WHERE password = '".$password."'") 
 or die(mysql_error());

请注意,username = '".$password."'已更改为password = '".$password."'。其次,您应该了解,如果您执行以下操作:

代码语言:javascript
复制
$pass = trim($_POST['pass']);
$pass = md5($_POST['pass']);

然后,$pass变量将只是md5'd而不会对其产生修剪效果,要实现这一点,您应该这样做:

代码语言:javascript
复制
$pass = trim($_POST['pass']);
$pass = md5($pass);

但你不应该修剪你的密码,因为那只是奇怪和不方便,它并没有真正增加任何东西。

执行此操作的代码行:

代码语言:javascript
复制
if($mysql_check_user 
   = mysql_query("SELECT * FROM  `users` WHERE  `username` LIKE  '$username' "))

if -语句是多余的,因为你只是做了一个赋值,你可以去掉if,让变量保持原样。即:

代码语言:javascript
复制
$mysql_check_user = mysql_query("SELECT * FROM `users` WHERE `username` LIKE '$username'");

另外,在编写代码时尽量保持某种风格,这会让你的代码更容易阅读。大多数代码编辑器在默认情况下都有这个功能,也许你需要在每个换行符上按TAB键才能正确缩进,这是一个巨大的帮助,尽管这样做吧。它看起来是什么样子的例子:

代码语言:javascript
复制
function register()
{
    if(isset($_POST['submit']))
    {
        if(!$_POST['first_name'] || 
           !$_POST['last_name'] || 
           !$_POST['username'] || 
           !$_POST['password'])
            header ("Location:user_registration.php");
        else
        {
            $firstname = trim($_POST['first_name']);
            $firstname = addslashes($_POST['first_name']);
            $lastname = trim($_POST['last_name']);
            $lastname = addslashes($_POST['last_name']);
            $username = trim($_POST['username']);
            $username = addslashes($_POST['username']);
            $password = trim($_POST['password']);
            $password = md5($_POST['password']);

            connect();

            if($mysql_check_user = mysql_query("SELECT * FROM  `users` WHERE  `username` LIKE  '$username' "))
            {
                $check_row = mysql_num_rows($mysql_check_user);
                if($check_row > 0)
                    die ("username Exist");
                else 
                {
                    $store = mysql_query
                             ("INSERT INTO `project_upload`.`users` 
                             (`id`, `fname`, `lname`, `username`, `password`) 
                             VALUES (NULL, '$firstname', '$lastname', '$username', '$password')");
                }
                if ($store)
                    echo "You have regstered succesfully. please go to <a href = 'uploads_login.php'>login page</a>";                                          
                else 
                    echo mysql_error();
            }
        }
    }
}
票数 4
EN

Stack Overflow用户

发布于 2012-01-03 20:29:10

实际上,没有解密MD5字符的选项。如果你想要比较,你必须将输入转换成MD5字符串,这样你就可以很容易地与db中存储的值进行比较。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8710982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档