$password = $_POST['password'];
// This should be the users actual salt after you've found the user
// in the database by username or email, or other means
$salt = $users_stored_salt;
// This should be the exact method you use to salt passwords on creation
// Consider creating a functon for it, you must use the same salt
// on creation and on validation
$hashed_password = hash('sha256', $salt.$password.$salt);
// This is the user's hashed password, as stored in the database
$stored_password = $users_stored_password;
// We compare the two strings, as they should be the same if given the
// same input and hashed the same way
if ($stored_password === $hashed_password){
echo "Logged in";
} else {
echo "Not logged in";
}
Пропустил ваше редактирование, но надеюсь, это поможет.
РЕДАКТИРОВАТЬ : я вижу, вы не храните уникальные хэши.
Если вы ищете пользователя по паролю, вам необходимо хешировать пароль в запросе так же, как он был сохранен:
$salt = $your_salt;
$hashed_password = hash('sha256', $salt.$_POST['password']);
$sql= "SELECT * FROM members WHERE username='$username' and password='$hashed_password'";
В противном случае вы можете найти по уникальному имени пользователя (не по паролю) и просто сравнить хешированный ввод со значением сохраненного пароля.
Я сейчас очень смущен. Как должен выглядеть мой login_ac.php, если я должен сделать это с кодом, который я дал вам вверху?
Просто измените запрос на поиск по хешированному паролю (как вы его сохранили).
$sql= "SELECT * FROM members WHERE username='$username' and password='".hash('sha256', $salt.$_POST['password'])."'";
Вы можете удалить другую проверку и хэширование - если вы нашли пользователя, то вы знаете, что ввод действителен.
Обратите внимание, что это работает только тогда, когда вы знаете, что хеширование ввода точно так же, как вы хэшировали пароль при создании.