шифрование codeigniter на производственном сервере и локальном сервере - PullRequest
3 голосов
/ 20 декабря 2010

Будет ли зашифрованный пароль, использующий класс шифрования codeigniter, создавать один и тот же зашифрованный пароль на двух разных компьютерах? Например, у меня есть рабочий сайт в сети с некоторым хостом, и у меня есть локальная установка на моем компьютере. Но пароли не совпадают, когда я восстанавливаю базу данных из одной в другую.

Ответы [ 4 ]

2 голосов
/ 06 сентября 2013

Я знаю, что это старый вопрос, но у меня была такая же проблема, и я понял это.

Библиотека шифрования CodeIgniter ведет себя по-разному в разных средах. В частности, библиотека автоматически обнаруживает, если у вас установлено расширение PHP mcrypt, и, если это так, использует совершенно другой алгоритм, чем в противном случае.

Возможно, на вашем сервере установлен mcrypt, а не среда разработки или наоборот.

Есть два способа это исправить. В любом случае вам необходимо расширить встроенный класс шифрования, создав класс MY_Encrypt.php:

Вариант один : всегда использовать mcrypt и громко проваливаться, если он не установлен:

class MY_Encrypt extends CI_Encrypt
{
    public function __construct()
    {
        if ( ! function_exists('mcrypt_encrypt')) {
            throw new Exception("Encryption requires mcrypt PHP extension!");
        }

        parent::__construct();
    }
}

Вариант второй : Никогда не используйте mcrypt, даже если он установлен:

class MY_Encrypt extends CI_Encrypt
{
    public function __construct()
    {
        parent::__construct();

        //Pretend Mcrypt doesn't exist no matter what
        $this->_mcrypt_exists = FALSE;

    }
}

Это приведет к тому, что шифрование CodeIgniter будет работать одинаково в любой среде.

ИМХО, библиотека шифрования не должна никогда молча менять алгоритм, используемый для шифрования, в зависимости от среды. Изменения алгоритма автоматического шифрования - ужасная идея.

1 голос
/ 12 сентября 2014

Я искал ответ на это, но я нашел решение, оно может быть неопределенным, но должно быть достаточно простым для новичков:

  1. Установить libmcrypt иустановить php-mcrypt .

  2. Отредактируйте файл php.ini.Некоторые дистрибутивы могут отличаться, мой находится по адресу: /etc/php/php.ini

  3. Найдите все расширения и добавьте комментарий или добавьте следующее в свой файл php.ini.

    extension = mcrypt.so

  4. Перезапустите Apache или любой используемый вами веб-сервер.

0 голосов
/ 28 октября 2016

Используйте это в файле config.php. Это даст вам другой ключ, но результат будет таким же:

$config['encryption_key'] = "YOUR KEY";
0 голосов
/ 20 декабря 2010

Не видя ваш код, невозможно сказать, в чем может быть проблема (вот почему у вас пока нет ответов).Однако, если вы шифруете строку таким же образом, если вы используете один и тот же ключ шифрования, он должен быть одинаковым.В классе шифрования CI ( см. Здесь ) вы можете сделать это в файле config.php следующим образом:

$config['encryption_key'] = "YOUR KEY";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...