使用php和md5登录和注册

使用php和md5登录和注册,php,mysql,md5,Php,Mysql,Md5,我正在尝试使用md5散列用户密码,但无法登录。它存储散列的密码,但当我登录时它不工作。为什么?这些是函数(在我开始使用md5之前,它是有效的) 您需要像这样更正Insert查询 $query = "insert into users (username, password) values('$username' , '".md5($pass)."')"; 这是因为在注册期间,您通过SQL将密码转换为MD5,在登录期间,您通过php将密码转换为MD5 这就是它们不匹配的原因,我想并非所有服

我正在尝试使用md5散列用户密码,但无法登录。它存储散列的密码,但当我登录时它不工作。为什么?这些是函数(在我开始使用md5之前,它是有效的)


您需要像这样更正Insert查询

$query = "insert into users (username, password) values('$username' , '".md5($pass)."')";   

这是因为在注册期间,您通过SQL将密码转换为
MD5
,在登录期间,您通过php将密码转换为
MD5

这就是它们不匹配的原因,我想并非所有服务器都是如此。 但有时会引起问题

因此,更好的方法是在s
ign\u-up
sign\u-in
期间通过
PHP
SQL
转换密码

因为在使用php的情况下,可能需要在MD5字符串中添加一些salt值,我发现了错误

  • 列密码是varchar(10)而不是varchar(32)(谢谢您告诉我!)
  • 当我试图解决这个问题时,我写道:

  • $check = $Database->checkLogin($_POST['username'], md5($_POST['password']));
    
    然后在数据库函数中

    function checkLogin($username, $password)
        {
            $password=md5($password);
            $checkLogin = "select * from users where username='$username' AND password='$password'";
            $check = mysql_query($checkLogin);
            return mysql_num_rows($check) > 0 ? true : false;
        }
    

    所以我基本上是在对已经散列的密码进行散列

    MD5是散列而不是加密。哦,对不起,我只知道MD5是用来存储密码的,因为它是不可逆的。那么为什么它不起作用呢?
    password
    的列定义是什么?这是您的问题。MD5返回一个32个字符的字符串。您真的没有将实际的DB值与哈希密码字符串进行比较,以确定其中一个更短吗?您是否注册了新用户?您是否将数据库中的哈希密码与您在
    checkLogin()
    中获得的密码进行了比较?该密码以md5格式正确存储!问题是,当我尝试记录indo交叉检查时,数据库中存储的MD5哈希是否正确。还要检查是否有任何尾随空间。在这种情况下,您需要修剪输入数据i使用的
    函数checkLogin($username,$password){$password=md5($password);$checkLogin=“select*from username='$username'和password='$password'”;$check=mysql\u query($checkLogin);返回mysql\u num\u行($check)>0?true:false;}函数setRegistration($username,$password){$password=md5($password);$query=“插入用户(用户名,密码)值('$username','$password')”;“mysql_查询($query)或死(mysql_error());}
    但它不起作用。您是否将
    MD5
    字符串(在
    checkLogin()过程中生成)与保存在数据库表中的密码进行了比较
    
    function checkLogin($username, $password)
        {
            $password=md5($password);
            $checkLogin = "select * from users where username='$username' AND password='$password'";
            $check = mysql_query($checkLogin);
            return mysql_num_rows($check) > 0 ? true : false;
        }