создание логина и пароля
<?
$user = 'root';
$string = '1234';
$salt = '';
$iterationCount = 100;
$result = '';
if (!$salt)
$salt = str_replace('=', '', base64_encode(md5(microtime() . '1FD37EAA5ED9425683326EA68DCD0E59')));
if ($_SERVER['REQUEST_METHOD']=='POST'){
$user = $_POST['user'] ?: $user;
if(!userExists($user)){
$string = $_POST['string'] ?: $string;
$salt = $_POST['salt'] ?: $salt;
$iterationCount = (int) $_POST['n'] ?: $iterationCount;
$result = getHash($string, $salt, $iterationCount);
$result = 'Хеш '. $result. ' успешно добавлен в файл';
if(saveHash($user, $result, $salt, $iterationCount))
$result = 'Хеш '. $result. ' успешно добавлен в файл';
else
$result = 'При записи хеша '. $result. ' произошла ошибка';
}else{
$result = "Пользователь $user уже существует. Выберите другое имя.";
}
}
?>
функции
function getHash($string, $salt, $iterationCount){
for($i=0; $i < $iterationCount; $i++)
$string = sha1($string . $salt);
return $string;
}
function userExists($login){
if(!is_file(FILE_NAME)) //если нет еще файла
return false;
$users = file(FILE_NAME);
foreach($users as $user){
if(strpos($user, $login) !== false)
return $user;
}
return false;
}
Проверка логина и пароля
session_start();
header("HTTP/1.0 401 Unauthorized");
require_once "secure.inc.php";
if($_SERVER['REQUEST_METHOD']=='POST'){
$user = trim(strip_tags($_POST["user"])); //логин
$pw = trim(strip_tags($_POST["pw"])); //пароль
$ref = trim(strip_tags($_GET["ref"]));
if(!$ref)
$ref = '/eshop/admin/';
if($user and $pw){
if($result = userExists($user)){
list($login, $password, $salt, $iteration) = explode( ' : ', $result);
//print_r ($result);
if (getHash($pw, $salt, $iteration) == $password){
$_SESSION['admin'] = true;
header("Location: $ref");
exit;
}else{
$title = 'Неправильный пароль!';
}
}else{
$title = 'Неправильное имя пользователя!';
}
}else{
$title = 'Заполните все поля формы!';
}
}
Включил echo в функцию
function getHash($string, $salt, $iterationCount){
for($i=0; $i < $iterationCount; $i++)
$string = sha1($string . $salt);
echo $string;
return $string;
}
Получается при создании логина и пароля выводится
Хеш b8e0e2e544fbc7599a7949e44eda66acece47471
Когда логин и пароль проверяется выводятся только введенные цифры
1234
Если включить print_r ($result); при проверке логина и пароля выводится
root:Хеш b8e0e2e544fbc7599a7949e44eda66acece47471 успешно добавлен в файл:NDM2ZjM5ZDdmODc0ODlmYmJiZTM2N2U5ZTEwZTA4YzA:100
Соответственно в переменную $password должно попасть
Хеш b8e0e2e544fbc7599a7949e44eda66acece47471 успешно добавлен в файл
не знаю насколько это правильно НО ОДНОЗНАЧНО не совпадает с 1234
Логин и пароль root 1234.
В итоге проверка пароля не проходит выводится
Неправильный пароль!
. Хотя естественно, что я ввожу правильный пароль - 1234. В чем может быть тут ошибка. Получается при проверке пароля не добавляется соль, но почему? Или что-то другое.