Intereting Posts
Сборник PHP – Копирование дубликатов при обновлении или изменении страницы Неустранимая ошибка WordPress php: вызов неопределенной функции language_attributes ()? Получение наборов множественного результата с хранимой процедурой в php / mysqli Генерация и деление сетки с помощью css / js / php Создание множества элементов DOM. какой метод быстрее? Эхо по HTML или с использованием класса PHP DOM? get_current_user_id () Не работает с wp_login Hook – WordPress Есть ли способ создать анонимный объект в PHP Значения массива PHP по умолчанию, если ключ не существует? PHP – создание многоуровневого ассоциативного массива из базы данных (сортировка городов по состоянию из db) mysql Выбор из двух разных таблиц. Как сохранить пароль пользователя с помощью Bcrypt "Не удалось открыть сокет" загрузить файл в MySql DB с помощью PHP Ошибка SMTP-сервера phpmailer Насколько безопасны переменные сеанса PHP?

PHP-соль и хеш SHA256 для логина входа

Я сделал шифрование пароля в моем скрипте регистрации, и они хранятся в базе данных, и я должен использовать их для входа в систему, поэтому я хотел бы использовать незашифрованные для входа. Я читал некоторые из потоков здесь, но ничто не помогает мне. Как добавить его в свой 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'";