Pull to refresh

Авторизация на сайте с помощью файлов, или мой велосипед

Здравствуй, $username.

Программируя на 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
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.