Проверьте, соответствуют ли имя пользователя / пароль имени пользователя / зашифрованному паролю. 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 + в базе данных.
Когда пользователь входит в систему, вы ищете соль для его имени пользователя, добавляете его к вводимому паролю, хешируете его и сравниваете с хешем, хранящимся в базе данных.
Если вы действительно настаиваете на наличии единой соли для всех пользователей, вы можете просто добавить свою глобальную соль к паролю, который вводит пользователь, и сравнить его с хешем, который вы сохранили.