2015-06-08 3 views
-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

Это происходит потому, что при регистрации вы конвертируете пароль MD5 через SQL и при входе в систему вы сравниваете пароль преобразуется в MD5 РНР.

Вот почему они несовместимы. Я думаю, что это не так на всех серверах. Но иногда это вызывает проблемы.

Так что лучший подход для преобразования пароля через PHP или SQL во время оба с ign_up и sign_in

Потому что в случае использования PHP может понравиться, чтобы добавить некоторые значения соли в их MD5 строки

+0

Я использовал 'function checkLogin ($ username, $ password) { $ password = md5 ($ password); $ checkLogin = "select * от пользователей, где username = '$ username' AND password = '$ password'"; $ check = mysql_query ($ checkLogin); return mysql_num_rows ($ check)> 0? true: false; } функция setRegistration ($ username, $ password) { $ password = md5 ($ password); $ query = "вставить в имена пользователей (имя пользователя, пароль) ('$ username', '$ password')"; mysql_query ($ query) или die (mysql_error()); } ', но он не работает – untruste

+0

Вы сравнили строку' MD5', которая генерируется во время 'checkLogin()' и пароль, сохраненный в таблице базы данных –

Смежные вопросы