Как я могу загрузить функцию только один раз и сохранить результат в переменной? - PullRequest
0 голосов
/ 28 декабря 2010

Я сейчас перебираю свой регистрационный код пользователя. Часть, на которой я сейчас концентрируюсь, это часть хэширования пароля.

Что я делаю, так это получаю static_salt из файла конфигурации и использую mt_rand () для генерации dynamic_salt. Я хочу, чтобы этот dynamic_salt хранился в моей базе данных.

Но если я передам метод dynamic_salt () методу create, чтобы отправить его в солевой столбец таблицы в моей базе данных, он просто снова запустит метод и создаст результат, отличный от того, который был получен в моем хэше () метод.

Как лучше всего достичь того, чего я пытаюсь достичь, не могли бы вы показать мне пример, если это возможно?

public function create() {

                $dbcolumn->password = $this->hashed();
                $dbcolumn->salt = $this->dynamic_salt;
                $this->db->insert('users', $dbcolumn);

    }

public function dynamic_salt() {

            $get_dynamic_salt = mt_rand();
            return $get_dynamic_salt;
}

public function hashed() { //hashing method, that also makes
            // sha1 and salt password
            $static_salt = $this->config->item('encryption_key'); //grab static salt from config file
            $dynamic_salt = $this->dynamic_salt();

        $password = $this->encrypt->sha1($this->input->post('password')); //encrypt user password
            $hashed = sha1($dynamic_salt . $password . $static_salt);

            return $hashed;
}

Ответы [ 2 ]

2 голосов
/ 28 декабря 2010

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

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

Добавление динамической соли для каждого пользователя будет означать, что вам нужно будет нажать на хранилище данных, чтобы получить динамическую соль и хешированную версию пароля пользователя, затем вам придется выполнять хэш-функцию с интенсивным использованием процессора (в вашем коде дважды - вы хэшируете хеш, который менее безопасен и с большей вероятностью имеет коллизии).

Наличие простой известной статической соли и хешированного пароля позволит вам использовать системы хранения ключей / значений, такие как memcache , если ваше приложение будет расти. Сохраните ID пользователя в качестве ключа, а пользователи хэшируют пароль в качестве значения, и у вас будет система молниеносной быстрой аутентификации.

1 голос
/ 28 декабря 2010

Попробуйте это:

public function dynamic_salt() {
    if(!isset($this->dyn_salt))
       $this->dyn_salt = mt_rand();
    return $this->dyn_salt;
}

Если переменная экземпляра dyn_salt еще не существует, ей будет присвоен результат mt_rand(), иначе она просто вернет предыдущее значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...