Функция password_verify становится истинной после 8-значного правильного пароля и игнорирует другие неправильные цифры

Функция, которую я использовал для шифрования пароля:

$password = crypt($password,"$2sd\$qwsazxcdrgfggfdfsdsd");

функция проверки пароля для соответствия паролю:

while($row = $result->fetch_assoc()){
if($row["email"] === $username && password_verify($password,$row["password"])){
$message .= "Logging Success!";

$userFound = true;
$_SESSION["email"]=$row["email"];
$_SESSION["fullname"] = $row["full_name"];
header('Location: view_contact.php');
exit;
}else{
$userFound = false;
}
}

Проблема здесь в том, когда я ввожу пароль. Я могу войти в систему, введя только 8 правильных паролей, остальные цифры игнорируются.

0

Решение

Попробуй использовать

password_hash($password, PASSWORD_DEFAULT)

вместо crypt

1

Другие решения

Если вы используете просто crypt (), тогда вы выбираете устаревший 56-битный алгоритм на основе DES, который действительно просматривает только первые 8 символов.

Используйте «$ 5 $ ….» или «$ 6 $ …» в качестве соли для выбора 256 или 512-битных алгоритмов на основе SHA2.

Смотрите «man 3 crypt» под Linux или https://en.wikipedia.org/wiki/Crypt_(C) или же http://php.net/manual/de/function.crypt.php

-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector