сравнение паролей в крипте не работает

У меня возникают проблемы при сравнении паролей с помощью crypt, один пароль от post другой вытащил из моего database

Вот мой код для входа с примером соли:

$username   = $_POST['username'];
$password   = $_POST['password'];
$cryptSalt  = '$2y$06$PizWslhw9Z9oM9QSPt9zY.g9faOSoUdNLO7RemQrWTMY.NOpr3oTG';
$password   = crypt($password, $cryptSalt);

if($login = $con->prepare("SELECT userID,userName,userPassword FROM users WHERE userName=?")) {
$login->bind_param("s", $username);
if($login->execute()) {
$login->bind_result($userID,$username,$currentPassword);
while($login->fetch()) {
if(crypt($password, $currentPassword) == $currentPassword) {
echo "<p class='alert'>Password Correct</p>";
} else {
echo "<p class='alert'>Password Incorrect</p>";
};
};
} else {
echo "<p class='alert'>User Not Found</p>";
};
};
$login->close();

Всякий раз, когда я печатаю в правильный пароль все равно выводит, что пароль неверный, есть ли причина для этого?

$username       = $_POST['username'];
$firstName      = $_POST['firstName'];
$lastName       = $_POST['lastName'];
$emailAddress   = $_POST['emailAddress'];
$cryptSalt      = '$2y$06$PizWslhw9Z9oM9QSPt9zY.g9faOSoUdNLO7RemQrWTMY.NOpr3oTG';
$password       = $_POST['password'];
$password       = crypt($password, $cryptSalt);

if($register = $con->prepare("INSERT INTO users(userName,userFirstName,userLastName,userEmailAddress,userPassword) VALUES(?,?,?,?,?)")) {
$register->bind_param("sssss", $username,$firstName,$lastName,$emailAddress,$password);
if($register->execute()) {
echo "<p class='alert'>Account Created</p>";
} else {
echo "<p class='alert'>Execution Error: Account Creation</p>";
};
};
$register->close();

Примечание: это внутренний веб-сайт, SQL инъекций не проблема.

1

Решение

Похоже, что вы хэшируете один раз слишком много (в строке 4 и строке 10), но вам нужно сравнить хеш введенного пароля с хешем в базе данных.

$username   = $_POST['username'];
$password   = $_POST['password'];
$cryptSalt  = '$2y$06$PizWslhw9Z9oM9QSPt9zY.g9faOSoUdNLO7RemQrWTMY.NOpr3oTG';
$password   = crypt($password, $cryptSalt);

if($login = $con->prepare("SELECT userID,userName,userPassword FROM users WHERE userName=?")) {
$login->bind_param("s", $username);
if($login->execute()) {
$login->bind_result($userID,$username,$currentPassword);
while($login->fetch()) {
if($password == $currentPassword) {
echo "<p class='alert'>Password Correct</p>";
} else {
echo "<p class='alert'>Password Incorrect</p>";
};
};
} else {
echo "<p class='alert'>User Not Found</p>";
};
};
$login->close();

ИЛИ ЖЕ

$username   = $_POST['username'];
$password   = $_POST['password'];
$cryptSalt  = '$2y$06$PizWslhw9Z9oM9QSPt9zY.g9faOSoUdNLO7RemQrWTMY.NOpr3oTG';

if($login = $con->prepare("SELECT userID,userName,userPassword FROM users WHERE userName=?")) {
$login->bind_param("s", $username);
if($login->execute()) {
$login->bind_result($userID,$username,$currentPassword);
while($login->fetch()) {
if(crypt($password, $cryptSalt) == $currentPassword) {
echo "<p class='alert'>Password Correct</p>";
} else {
echo "<p class='alert'>Password Incorrect</p>";
};
};
} else {
echo "<p class='alert'>User Not Found</p>";
};
};
$login->close();
0

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

Других решений пока нет …

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