Здравствуй, $username.
Программируя на PHP, меня очень беспокоил вопрос защиты хотя бы тех данных, по которым мы работаем с пользователями, я имею, введу данные для авторизации на сайте. И, по-моему, не важно, что за сайт, с которым работает пользователь, будь то соц. сеть, блог, браузерная игра или интернет-банкинг, защита данных, а особенно данных для авторизации пользователя есть первоочередной задачей для разработчика. Анализируя способы защиты учетных данных я пришел к выводу что, используя какой-то один способ практически невозможно защитить пользователя. Поэтому я решил «построить велосипед» и сделать систему авторизации с помощью логина (имейла), пароля и ключ-файла.
Работа «велосипеда» состоит в следующем.
Внимание. Это не весь код, полная версия на github, ссылка в конце статьи.
P. S. Этот код умеет работать с любыми данными любой длинны, а также не претендует на какие либо похвалы.
Буду рад Вашей критике.
И собственно ссылка на github: github.com/mishasvz/authFile
Программируя на PHP, меня очень беспокоил вопрос защиты хотя бы тех данных, по которым мы работаем с пользователями, я имею, введу данные для авторизации на сайте. И, по-моему, не важно, что за сайт, с которым работает пользователь, будь то соц. сеть, блог, браузерная игра или интернет-банкинг, защита данных, а особенно данных для авторизации пользователя есть первоочередной задачей для разработчика. Анализируя способы защиты учетных данных я пришел к выводу что, используя какой-то один способ практически невозможно защитить пользователя. Поэтому я решил «построить велосипед» и сделать систему авторизации с помощью логина (имейла), пароля и ключ-файла.
Работа «велосипеда» состоит в следующем.
Внимание. Это не весь код, полная версия на github, ссылка в конце статьи.
<?php
class AuthFile
{
...
/**
* здесь мы даем скрипту входящие данные
* к примеру логин, пароли, и электронный адрес
* */
public function createFile($login,$password,$email){
$this->login = $login;
$this->email = $email;
$this->password = $password;
/**
* вычисляем длину логина чтобы корректно работать с любыми данными
* и считаем нужную длину соли что бы все файлы были одинаковы
* */
$this->login_length = strlen($login);
if($this->login_length > 9){
$this->salt_start_length = 25496 - ($this->login_length*5) - 3;
}
else{
$this->salt_start_length = 25496 - ($this->login_length*5) - 2;
}
return $this;
}
// собственно управляющая функция которая генерирует мастер-файл
public function generateMasterFile(){
$data = $this->login_length.'a'.$this->generateLogin().$this->generateSalt($this->salt_start_length).$this->generateHash($this->login.$this->email.$this->password).$this->generateSalt(25496);
return $data;
}
// а эта функция генерирует файл с помощью которого мы будем представляться на сайте
public function generateKeyFile(){
$data = $this->login_length.'a'.$this->generateLogin().$this->generateSalt($this->salt_start_length).$this->generateHash($this->password).$this->generateSalt(25496);
return $data;
}
/**
* солим логин
* */
private function generateLogin(){
for($i = 0; $i < $this->login_length; $i++){
$data .= substr($this->login,$i,1).substr($this->generateSalt($this->login_length*4),$j,4);
}
return $data;
}
/**
* генерируем хеш и солим его
* */
private function generateHash($data){
$j = 0;
for($i = 0; $i <= 80; $i += 20){
$hash .= substr($this->generateSalt(128),$j,32).substr(hash('ripemd320',$data),$i,20);
$j += 32;
}
return $hash;
}
...
/**
* функция для работы с "шифрованными" файлами
* */
public function readFile($file,$that){
...
switch($that){
case 'login':
// читаем из файла логин
if(substr($data,1,1) == 'a'){
$login_length = substr($data,0,1);
$login_temp = substr($data,2,$login_length*5);
}
else{
$login_length = substr($data,0,2);
$login_temp = substr($data,3,$login_length*5);
}
for($i = 0; $i < $login_length*5; $i +=5){
$output .= substr($login_temp,$i,1);
}
...
// извлекаем хеш
$hash_temp = substr($data,25496,208);
for($i = 32; $i < 208; $i += 52){
$output .=substr($hash_temp,$i,20);
}
...
}
}
P. S. Этот код умеет работать с любыми данными любой длинны, а также не претендует на какие либо похвалы.
Буду рад Вашей критике.
И собственно ссылка на github: github.com/mishasvz/authFile