2015-04-30 1 views
1

Я пытаюсь войти в систему через PHP, используя имена пользователей и пароли из базы данных MySQL, которая сохраняет пользовательские имена, имена пользователей и hashed_passwords (которые я создал ранее с использованием регистрационной формы, а соль для хеш md5: 2155).Вход PHP с использованием данных MySQL и хеширования пароля

Проблема заключается в том, что я не могу получить пароль для незашифрованного использования, чтобы использовать его для входа.

И я не уверен, как это сделать, чтобы закодировать запрос, чтобы искать имя пользователя и пароль из базы данных на основе ввода пользователя.

$sql = "SELECT * FROM user where username = '$_POST["username"]' AND password = '$_POST["password"]"; 
$rows = $conn->query($sql); 

     if ($userID > 0){ 
        echo "Hello World"; 
      header("Location: login_success.php"); 
     } 

     else{ 
         echo "Unsuccessful"; 
      header("Location: index.php"); 
     } 
+0

Возможный дубликат [PHP Login system with Cookies and Salted Hashes] (http://stackoverflow.com/questions/401985/php-login-system-using-cookies-and-salted-hashes) – ops

+1

Вместо того, чтобы просто использовать $ _POST ["password"] в запросе, применяйте шифрование перед его использованием –

+0

@SanjayKumarNS Как я могу применить шифрование перед его использованием? Я пробовал несколько методов, но никогда не работал – Mustafa

ответ

0

Если при вставке записи пользователя в таблице, вы использовали md5 шифрования, ваш SQL будет вдоль линий:

$sql = "INSERT INTO `tblUsers` (`username`, `userpassword`) VALUES ('myusernameis', md5('mysecretpass'));"; 

, что означает, что при извлечении этой записи для аутентификации (логин), вы бы использовать что-то вроде:

$sql = "SELECT * FROM `tblUsers` WHERE `username` = 'myusernameis' AND `userpassword` = md5('mysecretpass') LIMIT 1;"; 
0

Во время вставки пароля пользователя «яблочного» шифруется с помощью md5 так из положить любит «г Судьи $ fdfjd»и хранится в базе данных, в форме входа вы проверяете„яблоко“равно„gjdg $ fdfjd“, так что вы адресность ошибки проверки, чтобы исправить это, чтобы добавить такое же шифрование для пользователя проверки пароля

$sql = "SELECT * FROM user where username = '$_POST["username"]' AND password = 'md5($_POST["password"])"; 

но вы не можете расшифровать MD5, не пытаясь что-то вроде взлома грубой силы, которая чрезвычайно ресурсоемкая, непрактичная и неэтичная. Так что использовать функции шифрования и депритирования понравилось это

function encrypt($q) { 
    $cryptKey = 'fdf'; 
    $qEncoded  = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($cryptKey), $q, MCRYPT_MODE_CBC, md5(md5($cryptKey)))); 
    return($qEncoded); 
} 

function decrypt($q) { 
    $cryptKey = 'fdf'; 
    $qDecoded  = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($cryptKey), base64_decode($q), MCRYPT_MODE_CBC, md5(md5($cryptKey))), "\0"); 
    return($qDecoded); 
} 
+0

, чтобы проверить, совпадает ли пароль пользователя, вам не нужно расшифровывать пароль на сервере, просто зашифруйте введенный пользователем пароль так же, как и сохраненный. –

0

Я китайский php. ваш код имеет некоторые ошибки; где пароль пользователя записи, ваша потребность mad5 (пароль)


 

 
    $password = mad5($_post['password']) 
 

 
$user = $_post['user']; 
 
$sql = "select * from user where username = $user "; 
 
$rows = $conn->query($sql); 
 
if($rows['password'] ===$password ) 
 
{ 
 
echo "success"; 
 
header("Location: login_success.php"); 
 
}else{ 
 
echo "unsuccessful"; 
 
header("Location: index.php"); 
 
}

0

Вместо того чтобы использовать MD5 или пытаются расшифровать пароль - как другие тут предложено - просто использовать родную password_hash() функции PHP, которая автоматически проверяет, подходит ли вам пароль.

шифровать пароль так:

$unencrypted_password = 'secret!'; 
$encrypted_password = password_hash($unencrypted_password, PASSWORD_DEFAULT); 

Затем вставьте в вашу БД так:

INSERT INTO users (encrypted_password, username) VALUES ($encrypted_password, $username); 

Если вы хотите проверить, если пароль правильный, выберите пароль из базы данных с:

SELECT encrypted_password FROM users WHERE username = $username;

Наконец, убедитесь, что пароль правильный с помощью passoword_verify():

$correct = password_verify($unecnrypted_password, $encrypted_password); 
if($correct == true) { 
    echo 'correct password!'; 
} else { 
    echo 'password incorrect!'; 
} 

Будьте осторожны, чтобы защитить от SQL-инъекций, так как приведенный выше код уязвим к нему.

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

  • Нет связанных вопросов^_^