Проверьте, соответствуют ли имя пользователя / пароль имени пользователя / зашифрованному паролю. Whirlpool шифрование и соль

Я только начинаю изучать php и решил поставить себя перед задачей кодирования регистра и сценария входа в систему.

Я не уверен, как продолжить. Прежде чем приступить к поиску моего кода... Пожалуйста, не будьте парнем, который рассуждает о SQL-инъекциях и таблицах Бобби. Я это понимаю, но пока не смотрю на это.

В любом случае, я зашифровал пароль с помощью джакузи и соли. В настоящее время соль является статической, не знаю, как ее реализовать с помощью функции Time() и не победить цель, найдя ее в базе данных. Проблема, которую я пытаюсь решить, состоит в том, как проверить, вводил ли пользователь имя пользователя и пароль, которые совпадают с именем пользователя и HASHED паролем.

Вот мой текущий код, я предполагаю, что самые важные части будут в файле login.php.

<?php
//connect.php
    $connection = mysql_connect("localhost","root","") or die("Couldn't connect to database");
    mysql_select_db("test", $connection);
?>

<?php
//index.php
include 'connect.php';
define('salt','7hPqMO(m=F+!!L6(#Yhp-CdF, &Q}+cIrA;c@wcP(E--V<qRmq!v*aSnM;H=4cD0');


if(isset($_POST['username']) && isset($_POST['fullname']) && isset($_POST['email']) &&      isset($_POST['password'])) {
    $username = mysql_real_escape_string($_POST['username']);
    $fullname = mysql_real_escape_string($_POST['fullname']);
    $email = mysql_real_escape_string($_POST['email']);
    $password = mysql_real_escape_string($_POST['password']);
    $encryptedPassword = hash( 'whirlpool',salt.$password );

    $sql="INSERT INTO `users` (username, fullname, email, password)
    VALUES
    ('$username', '$fullname','$email','$encryptedPassword')";

    if(!mysql_query($sql,$connection)) {
        die('Error: ' . mysql_error());
    } else {
        mysql_close($connection);
        header('Location: login.php?redirectedFromRegister=1');
    }
}
?>

<html>
    <body>
        <form action="index.php" method="post">
            <h1>REGISTER</h1><hr/>

            Email:    <input type="text" name="email"/><br/>
            Full Name:<input type="text" name="fullname"/><br/>
            Username: <input type="text" name="username"/><br/>
            Password: <input type="password" name="password"/><br/>

            <input type="submit" value="REGISTER"/>
        </form>
    </body>
</html>

<?php 
//login.php
include 'connect.php';

if(isset($_GET['redirectedFromRegister'])==1) {
    echo 'Thank you for registering, you may now login';
} else {
    echo '<h1>LOGIN</h1>';
}
?>

<html>
    <body>
        <form action="index.php" method="post">

            Username: <input type="text" name="username"/><br/>
            Password: <input type="password" name="password"/><br/>

            <input type="submit" value="LOGIN"/>
        </form>
    </body>
</html>

На самом деле этот вопрос, вероятно, прост, но я подумал, что включу свой текущий код, чтобы люди могли кое-что узнать о нем.

Как вы расшифровываете хешированный пароль, учитывая соль или что-то еще. Как я уже сказал, я не уверен, как это делается.

Информация о моей базе данных, если вы не видели ее в файле connect.php:

Database : Localhost
Username : Root
Password : ""
Table    : users

Table layout :

------------------------------------------------------------------  
|  Id  |  Username  |  Password  |  Email       |  Fullname      |
------------------------------------------------------------------
|  1   |BobbyTables | HASHED_PASS|email@E.com   | Max Mastalerz  |
|  2   | SteveJo    | HASHED_PASS|steve@jobs.com| Steve Jobs     |
|  3   | MarkZuck   | HASHES_PASS|MarkZ@fb.com  | Mark Zuckerberg|
------------------------------------------------------------------

Коды также легко доступны в виде вставки здесь:

Connect.php: http://pastebin.com/8ft12kG5

Index.php: http://pastebin.com/TqrJhzdu

login.php: http://pastebin.com/9fR3HJhe

1 ответ

Решение

Общая идея соленых хэшей заключается в том, что вы генерируете соль для каждого пользователя, добавляете ее к паролю и сохраняете соль вместе с хэш-паролем salted + в базе данных.

Когда пользователь входит в систему, вы ищете соль для его имени пользователя, добавляете его к вводимому паролю, хешируете его и сравниваете с хешем, хранящимся в базе данных.

Если вы действительно настаиваете на наличии единой соли для всех пользователей, вы можете просто добавить свою глобальную соль к паролю, который вводит пользователь, и сравнить его с хешем, который вы сохранили.

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