Попытка обернуть мою голову вокруг соли пароля PHP / шифрования - PullRequest
0 голосов
/ 07 октября 2011

Сейчас я занимаюсь разработкой приложения, которое позволит онлайн-регистрацию.Для разработки проверка пароля просто проверяет строку MySQL, чтобы убедиться, что значение соответствует значению в поле ввода.

Этот код проверяет, существует ли строка:

$res = mysql_query("SELECT * FROM `users` WHERE `username` = '".$username."' AND `password` = '".$password."'");
                    $num = mysql_num_rows($res);
                    //check if there was not a match
                    if($num == 0){
                        //if not display error message
                        echo "<center>The <b>Password</b> you supplied does not match the one for that username!</center>";

Я запутался в реализации солевой системы.Как бы я изменил этот скрипт для проверки зашифрованного пароля?Я не нашел хорошего учебника, который объясняет это подробно.

Ответы [ 2 ]

2 голосов
/ 07 октября 2011

Соль - это набор символов, добавляемых в начало или конец пароля перед шифрованием и дешифрованием, чтобы затруднить атаку методом подбора.

Сначала вы создаете соль, представляющую собой случайную фиксированную последовательность символов, а затем добавляете ее к паролю перед хэшированием. Вы также должны экранировать свои данные, прежде чем вводить их в запрос, чтобы предотвратить атаки с использованием MySQL.

Сделайте это при вводе пропуска в базу данных

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['pass']);
$pass_hash = md5($SALT.$password);
mysql_query(*query to insert $username and $pass_hash into db*)

Для проверки правильности пароля

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['pass']);
$res = mysql_query(*query to extract $pass_hash from db where username==$username)
//get the password from the $res and put it in a var
if(md5($SALT.$pass_hash_from_db) == $password){*correct pass*} else {*invalid login*}

Установить $ SALT для некоторой большой случайной статической строки, такой как $ SALT = "WEHGFHAWEOIfjo; cewrxq # $%";

0 голосов
/ 07 октября 2011

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

// you save this in the database
$encPass = encFunction( $password.$salt );

и когда какой-либо пользователь хочет войти, вы проверяете, является ли этот пароль столбцом пароля этого пользователя.

Примечание:
- encFunction - ваша функция шифрования

...