PHP-соль и хеш SHA256 для логина входа
Я зашифровал пароль в своем регистре script, и они хранятся в базе данных, и я должен использовать их для входа в систему, поэтому я бы хотел использовать незашифрованные для входа. Я читал некоторые из потоков здесь, но ничто не помогает мне. Как добавить его в мой login.php? Соль также сохраняется в базе данных.
Это мой register.php script для шифрования
$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");
}
Ответы
Ответ 1
Эти примеры взяты из 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.';
}
Ответ 2
В соответствии с php.net параметр Salt устарел от PHP 7.0.0, поэтому вы должны использовать соль, которая генерируется по умолчанию и намного проще
Пример для хранения пароля:
$hashPassword = password_hash("password", PASSWORD_BCRYPT);
Пример проверки пароля:
$passwordCorrect = password_verify("password", $hashPassword);
Ответ 3
array hash_algos(void)
echo hash('sha384', 'Message to be hashed'.'salt');
Вот ссылка на ссылку http://php.net/manual/en/function.hash.php
Ответ 4
Вы не смогли войти в систему, потому что у вас не было правильного текста солода во время входа в систему.
Есть два варианта: сначала задайте статическую соль, во-вторых, если вы хотите создать динамическую соль, то вам нужно сохранить соль где-нибудь (означает в базе данных) с ассоциированным с пользователем.
Затем вы объединяете строку пользователя solt + password_hash с этим, вы запускаете запрос с именем пользователя в таблице базы данных.
Ответ 5
Я думаю, что @Flo254 связал $salt
с $password1
и сохранил их в переменной $hashed
. Переменная $hashed
входит в запрос INSERT
с $salt
.
Ответ 6
Вы не можете этого сделать, потому что вы не можете знать соль в точное время. Ниже приведен код, который работает теоретически (не тестируется для синтаксиса)
<?php
$password1 = $_POST['password'];
$salt = '[email protected]_SaLT';
$hashed = hash('sha256', $password1 . $salt);
?>
Когда вы вставляете:
$qry="INSERT INTO member VALUES('$username', '$hashed')";
И для извлечения пользователя:
$qry="SELECT * FROM member WHERE username='$username' AND password='$hashed'";