password_hash, Password_default вызывает проблему

У меня есть 2 страницы регистрации с разными кодами, но я хочу, чтобы они возвращали один и тот же хэш пароля! или, по крайней мере, принятый формат Password_verify первым:

function _password_hash($password) {
    return password_hash($password, PASSWORD_DEFAULT);
}

  $db->query(sprintf("INSERT INTO users (user_name, user_email, user_phone, user_password, user_firstname, user_lastname, user_gender, user_birthdate, user_registered, user_activation_key) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", secure($args['username']), secure($args['email']), secure($args['phone']), secure(_password_hash($args['password'])), secure(ucwords($args['first_name'])), secure(ucwords($args['last_name'])), secure($args['gender']), secure($args['birth_date']), secure($date), secure($activation_key) )) or _error(SQL_ERROR_THROWEN);

и второе это:

$user_firstname = $mysqli->escape_string($_POST['firstname']);
$user_lastname = $mysqli->escape_string($_POST['lastname']);
$user_name = $mysqli->escape_string($_POST['user_name']);
$user_email = $mysqli->escape_string($_POST['user_email']);
$user_password = $mysqli->escape_string(password_hash($_POST['user_password'], PASSWORD_DEFAULT));
$hash = $mysqli->escape_string(md5(time()*rand(1, 9999)));

$sql = "INSERT INTO users (user_firstname, user_lastname, user_name, user_email, user_password, hash) "
        . "VALUES ('$user_firstname','$user_lastname','$user_name','$user_email','$user_password', '$hash')";

вывод пароля не совпадает

1 ответ

Функция password_hash() никогда не возвращает тот же хэш пароля из-за засолки, но он всегда создает формат, принятый password_verify(), Если это не так, убедитесь, что хеш хранится как varchar(255) и что обе страницы используют одну и ту же версию PHP.

Если вы используете password_hash(), ни экранируйте пароль пользователя, ни хэш пароля не должен быть экранирован (он уже находится в безопасной форме).

Другие вопросы по тегам