Подтвердить что ты не робот

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");
}
4b9b3361

Ответ 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);

Ответ 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'";