Я пытаюсь войти через PHP, используя имена пользователей и пароли из базы данных MySQL, в которой сохраняются userID, usernames и hashed_passwords (которые я создал ранее с помощью регистрационной формы, и соль для хеша md5: 2155).
Проблема в том, что я не могу получить незашифрованный пароль, чтобы использовать его для входа в систему.
И я не уверен, что это то, как кодировать запрос для поиска имени пользователя и пароля из базы данных на основе ввода пользователя.
$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");
}
Если, когда вы вставили запись пользователя в таблицу, вы использовали 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;";
Во время вставки пароль пользователя «apple» зашифровывается с использованием md5, поэтому выкладывает лайки «gjdg $ fdfjd» и сохраняет их в базе данных. В форме входа вы проверяете, что «apple» равно «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 );
}
Я китайский phper.
в вашем коде есть ошибки;
где пользователь пишет пароль, вам нужно 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");
}
Вместо того, чтобы использовать MD5 или пытаться расшифровать пароль — как уже предлагали другие — просто используйте нативный PHP password_hash () функция, которая автоматически проверяет, является ли пароль правильным для вас.
Зашифруйте пароль следующим образом:
$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-инъекций, так как приведенный выше код уязвим к нему.