php
  • mysql
  • md5
  • 2015-06-08 130 views -2 likes 
    -2

    我试图使用md5散列用户密码,但我无法登录。它存储了密码哈希值,但是当我登录时它不起作用。为什么?这些功能(在我开始使用md5之前)使用php和md5登录并注册

    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; 
    } 
    
    function setRegistration($username, $password) { 
        $query = "insert into users (username, password) values('$username' , md5('$password'))"; 
    
        mysql_query($query) 
        or die (mysql_error()); 
    } 
    
    +2

    MD5是一个散列而不是加密。 – Daan

    +0

    对不起,我只知道md5用于存储密码,因为它是不可逆的。那么为什么它不工作? – untruste

    +1

    “password”的列定义是什么? – marekful

    回答

    0

    我发现加点盐值这个错误。

    1. 列密码为VARCHAR(10)而非VARCHAR(32)(谢谢你告诉我!)
    2. 当我试图解决我写的问题是:


    $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; 
        } 
    

    所以我基本上做了一个哈希密码!

    -2

    您需要纠正像这样的插入查询。

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

    密码正确以md5格式存储!问题是当我尝试登录 – untruste

    +0

    做交叉检查时,如果存储在数据库中的MD5哈希值是正确的。还要检查你是否有任何尾随空格。在这种情况下,您需要修整您的输入数据。 –

    0

    这是因为在注册过程中你是通过SQL密码转换为MD5和登录期间你是比较通过PHP转换为MD5密码。

    这就是为什么它们不匹配我猜这不是所有服务器上的情况。 但有时会导致问题。

    因此,更好的办法是通过PHPSQL转换密码中既有S ign_upsign_in

    因为PHP利用万一可能喜欢在他们的MD5串

    +0

    我使用了'功能checkLogin($ username,$ password) { $ password = md5($ password); $ checkLogin =“select * from username where username ='$ username'AND password ='$ password'”; $ check = mysql_query($ checkLogin); return mysql_num_rows($ check)> 0?真假; } 函数setRegistration($ username,$ password){ $ password = md5($ password); $ query =“insert into users(username,password)values('$ username','$ password')”; mysql_query($ query) or die(mysql_error()); }'但它不起作用 – untruste

    +0

    你有没有比较在'checkLogin()'过程中产生的'MD5'字符串和保存在数据库表中的密码 –

    相关问题