Класс шифрования
Класс шифрования обеспечивает двухстороннее шифрование данных. Он шифрует с помощью PHP расширения Mcrypt, которое необходимо для запуска класса шифрования (этого класса).
Важно
Эта библиотека является устаревшей и хранится для обратной совместимости. Пожалуйста, используйте новую библиотеку шифрования.
Использование библиотеки шифрования
Установка ключа
Ключ - часть информации, контролирующая процесс шифрования и позволяющая расшифровать зашифрованную строку. На самом деле, ключ, который вы выбрали обеспечит ТОЛЬКО расшифровку тех данных, что были зашфрованы этим ключом, так что не только внимательно выберайте ключ, но и никогда не изменяйте его, если вы намерены использовать его для постоянных данных.
Само собой разумеется, что вы должны хранить ваш ключ бережно. Стоит кому-либо получить доступ к вашему ключу, эти данные будут легко расшифрованы. Если ваш сервер не полностью под вашим контролем, невозможно обезопасить ключ безопасности, так что будьте внимательны перед использованием его для всего, что требует высокого уровня безопасности, например хранение номеров кредитных карт.
Чтобы максимально использовать алгоритм шифрования, ваш ключ должен быть длиной 32 символа (256 бита). Ключ должен являться случайной строкой, состоящей из цифр и букв верхнего и нижнего регистра. Ключ НЕ должен быть простой текстовой строкой. Для того, чтобы он был криптографически стойким, он должен быть как можно более произвольным.
Ваш ключ может храниться в файле application/config/config.php, или вы можете создать свой собственный механизм хранения и передачи ключа динамически при шифровании/расшифровки.
Чтобы сохранить ключ в application/config/config.php, откройте файл и установите:
$config['encryption_key'] = "YOUR KEY";
Длина сообщения
Важно знать, что закодированные сообщения, генерируемые функцией шифрования, будут приблизительно в 2,6 раза длиннее исходного сообщения. Например, если зашифровать строку“my super secret data”, длиной в 21 символ, то получите строку состоящую из грубо говоря 55 символов (тут “грубо говоря”, потому что закодированная строка инкрементируется с шагом в 64 битных кластера, поэтому не совсем линейная). Имейте эту информацию в виду при выборе механизма хранения данных. Cookies (куки), например, может содержать только 4К информации.
Инициализация класса
Как и большинство классов CodeIgniter, Класс шифрования инициализируется в контроллере с помощью $this->load->library() метода:
$this->load->library('encrypt');
После загрузки библиотеки шифрования объект будет доступен через:
$this->encrypt
Настройки класса
- class CI_Encrypt
- encode($string[, $key = ''])
Параметры: - $string (строка) – Данные для шифрования
- $key (строка) – Ключ шифрования
Возвращает: Зашифрованная строка
Возвращаемый тип: Строка
Выполняет шифрование данных и возвращает их как строку. Пример:
$msg = 'My secret message'; $encrypted_string = $this->encrypt->encode($msg);
Вы можете передать свой ключ шифрования вторым параметром, если не хотите использовать ключ из config файла:
$msg = 'My secret message'; $key = 'super-secret-key'; $encrypted_string = $this->encrypt->encode($msg, $key);
- decode($string[, $key = ''])
Параметры: - $string (строка) – Строка для расшифровки
- $key (строка) – Ключ шифрования
Возвращает: Простую текстовую строку
Возвращаемый тип: Строка
Расшифровка закодированной строкой. Пример:
$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84'; $plaintext_string = $this->encrypt->decode($encrypted_string);
Вы можете передать свой ключ шифрования вторым параметром, если не хотите использовать ключ из config файла:
$msg = 'My secret message'; $key = 'super-secret-key'; $encrypted_string = $this->encrypt->decode($msg, $key);
- set_cipher($cipher)
Параметры: - $cipher (число) –Корректная PHP-MCrypt постоянная шифра
Возвращает: CI_Encrypt экземпляр (цепочка методов)
Возвращаемый тип: CI_Encrypt
Позволяет установить Mcrypt шифр. По умолчанию он использует MCRYPT_RIJNDAEL_256. Пример:
$this->encrypt->set_cipher(MCRYPT_BLOWFISH);
Пожалуйста, посетите php.net для просмотра списка доступных шифров.
Если вы желаете проверить вручную, поддерживает ли ваш сервер MCrypt можно использовать:
echo extension_loaded('mcrypt') ? 'Yup' : 'Nope';
- set_mode($mode)
Параметры: - $mode (число) – Корректная PHP-MCrypt постоянная режима
Возвращает: CI_Encrypt экземпляр (цепочка методов)
Возвращаемый тип: CI_Encrypt
Позволяет установить Mcrypt режим. По умолчанию он использует MCRYPT_MODE_CBC. Пример:
$this->encrypt->set_mode(MCRYPT_MODE_CFB);
Пожалуйста, посетите php.net для просмотра списка доступных режимов.
- encode_from_legacy($string[, $legacy_mode = MCRYPT_MODE_ECB[, $key = '']])
Параметры: - $string (строка) – Строка для шифрования
- $legacy_mode (число) – Корректный PHP-MCrypt постоянная шифра
- $key (строка) – Ключ шифрования
Возвращает: Недавно зашифрованая строка
Возвращаемый тип: Строка
Позволяет повторно кодировать данные, которые первоначально были зашифрованы CodeIgniter 1.x, чтобы быть совместимыми с библиотекой шифрования CodeIgniter 2.x. Необходимо использовать этот метод, если у вас есть зашифрованные данные, хранящиеся в базе данных в виде файла или на сервере, который поддерживает Mcrypt. “Light” использует шифрование, зашифрованных данных сеанса или зашифрованные флэш-данные не требуют вмешательства с вашей стороны. Однако, существующие зашифрованные сеансы будут уничтожены, так как данные зашифрованные до 2.x не подлежат расшифровке.
Важно
Почему метод повторного кодирования данных вместо того, чтобы поддерживать устаревшие методы для кодирования и декодирования? Алгоритмы библиотеки шифрования улучшили в CodeIgniter 2.x как для производительности так и для безопасности, и мы не желаем дальнейшего использования старых методов. Можно конечно расширить библиотеку шифрования, если хотите заменить старые методы на новые и сохранить полную совместимость зашифрованных данных в CodeIgniter 1.x, но это решение разработчик должен принимать осторожно и обдуманно, прежде всего.
$new_data = $this->encrypt->encode_from_legacy($old_encrypted_string);
Параметр По умолчанию Описание $orig_data n/a Оригинал зашифрованных данных библиотекой шифрования CodeIgniter 1.x $legacy_mode MCRYPT_MODE_ECB Mcrypt режим, который был использован для создания оригинальных зашифрованных данных. CodeIgniter 1.x по умолчанию был MCRYPT_MODE_ECB, и он будет считать этот параметр по умолчанию. $key n/a Ключ шифрования. Указан в файле config, как описано выше.