PHP password_hash и password_verify не работает с MySQL

я использую password_hash хранить пароли в поле базы данных MySQL типа VARCHAR (255). Когда я пытаюсь войти в систему пользователя и проверить учетные данные, password_verify функция всегда возвращает false.

Вот фрагмент кода, который хранит пароль в базе данных MySQL:

$password_hash = password_hash($password, PASSWORD_DEFAULT);

// Generate API Key
$api_key = $this->generateApiKey();

// Insert Query
$stmt = $this->conn->prepare("INSERT INTO user(email, password, name, api_key, status) values(?, ?, ?, ?, 1)");
$stmt->bind_param("ssss", $email, $password_hash, $name, $api_key);
$result = $stmt->execute();
$stmt->close();

И кусок кода, который проверяет пароль:

// Query user by email
$stmt = $this->conn->prepare("SELECT password FROM user WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();

$stmt->bind_result($password_hash);
$stmt->store_result();

if ($stmt->num_rows > 0) {
// Found user with that email address
// Now verify the password

$stmt->fetch();
$stmt->close();

if (password_verify($password, $password_hash)) {
// User password is correct
return TRUE;

Затем я написал этот тестовый код и получил данные прямо из поля MySQL, и он все еще не работает. Когда я создаю password_hash в том же файле ($ hash2 в файле ниже) — тогда пароль проверяется правильно.

$password = 'pass1234567890';
$hash = '$2y$10$JLP/pPei6RYRdUmoH8H5RO7iJyImOtrBLsrRRfq3XpeqNE3lQ/l7O';
$hash2 = password_hash($password, PASSWORD_DEFAULT);

echo $hash . " - " . strlen($hash);
echo "<br />";
echo $hash2 . " - " . strlen($hash2);
echo "<br />";

if (password_verify($password, $hash)) {
echo "Password Valid!";
} else {
echo "Password invalid!";
}

echo "<br /><br />";

if (password_verify($password, $hash2)) {
echo "Password 2 Valid!";
} else {
echo "Password 2 invalid!";
}

1

Решение

Это доказывает, что с вашим хешем что-то не так

<?php
// See the password_hash() example to see where this came from.
$password = 'pass1234567890';
$hash = '$2y$10$JLP/pPei6RYRdUmoH8H5RO7iJyImOtrBLsrRRfq3XpeqNE3lQ/l7O';

$hash2 = '$2y$10$gMJKYZUc1FKSZBnsONxLOebOHj.uuEWSiCP0jo4Zv0iAHBz6iz.NG';

if (password_verify('pass1234567890', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}

echo "<br>";

if (password_verify('pass1234567890', $hash2)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}

Скриншотвведите описание изображения здесь

1

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

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

По вопросам рекламы [email protected]