Я сделал шифрование пароля в моем скрипте регистрации, и они хранятся в базе данных, и я должен использовать их для входа в систему, поэтому я хотел бы использовать незашифрованные для входа. Я читал некоторые из потоков здесь, но ничто не помогает мне. Как добавить его в свой login.php? Соль также хранится в базе данных.
Это мой скрипт register.php для шифрования
$hash = hash('sha256', $password1); function createSalt() { $text = md5(uniqid(rand(), TRUE)); return substr($text, 0, 3); } $salt = createSalt(); $password = hash('sha256', $salt . $hash);
и это мой login.php с сезоном
//Create query $qry="SELECT * FROM member WHERE username='$username' AND password='$password'"; $result=mysql_query($qry); //Check whether the query was successful or not if($result) { if(mysql_num_rows($result) > 0) { //Login Successful session_regenerate_id(); $member = mysql_fetch_assoc($result); $_SESSION['SESS_MEMBER_ID'] = $member['id']; $_SESSION['SESS_FIRST_NAME'] = $member['username']; $_SESSION['SESS_LAST_NAME'] = $member['password']; session_write_close(); header("location: profile.php"); exit(); } else { //Login failed //error message } else { die("Query failed"); }
Эти примеры взяты из php.net. Благодаря вам я также узнал о новых функциях хэширования php.
Прочтите документацию php, чтобы узнать о возможностях и лучших практиках: http://www.php.net/manual/en/function.password-hash.php
Сохранить хэш пароля:
$options = [ 'cost' => 11, ]; // Get the password from post $passwordFromPost = $_POST['password']; $hash = password_hash($passwordFromPost, PASSWORD_BCRYPT, $options); // Now insert it (with login or whatever) into your database, use mysqli or pdo!
Получить хэш пароля:
// Get the password from the database and compare it to a variable (for example post) $passwordFromPost = $_POST['password']; $hashedPasswordFromDB = ...; if (password_verify($passwordFromPost, $hashedPasswordFromDB)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; }
Согласно php.net, опция Salt устарела с PHP 7.0.0, поэтому вы должны использовать соль, которая генерируется по умолчанию и намного проще
Пример для хранения пароля:
$hashPassword = password_hash("password", PASSWORD_BCRYPT);
Пример проверки пароля:
$passwordCorrect = password_verify("password", $hashPassword);
Вы не смогли войти в систему, потому что у вас не было правильного текста солода во время входа в систему. Есть два варианта: сначала задайте статическую соль, во-вторых, если вы хотите создать динамическую соль, то вам нужно сохранить соль где-нибудь (означает в базе данных) с ассоциированным с пользователем. Затем вы объединяете строку user solt + password_hash с этим, вы запускаете запрос с именем пользователя в таблице базы данных.
array hash_algos(void) echo hash('sha384', 'Message to be hashed'.'salt');
Ссылка на ссылку http://php.net/manual/en/function.hash.php
Вы не можете этого сделать, потому что вы не можете знать соль в точное время. Ниже, код, который работает теоретически (не тестировался для синтаксиса)
<?php $password1 = $_POST['password']; $salt = 'hello_1m_@_SaLT'; $hashed = hash('sha256', $password1 . $salt); ?>
Когда вы вставляете:
$qry="INSERT INTO member VALUES('$username', '$hashed')";
И для извлечения пользователя:
$qry="SELECT * FROM member WHERE username='$username' AND password='$hashed'";