Spec-Zone.ru › CodeIgniter 3

Класс Encrypt

Класс Encrypt предоставляет двухстороннее шифрование данных. Он использует расширение Mcrypt PHP, которое необходимо для работы класса Encrypt.

Важно

Эта библиотека устарела и поддерживается только для обратной совместимости. Используйте новую Библиотеку шифрования.

  • Использование библиотеки Encrypt
    • Установка ключа
    • Длина сообщения
    • Инициализация класса
  • Справочник по классу

Использование библиотеки Encrypt

Установка вашего ключа

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

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

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

Ключ можно хранить в файле application/config/config.php или разработать собственный механизм хранения и передавать ключ динамически при кодировании/декодировании.

Чтобы сохранить ваш ключ в application/config/config.php, откройте файл и задайте:

$config['encryption_key'] = "YOUR KEY";

Длина сообщения

Важно знать, что закодированные сообщения, генерируемые функцией шифрования, будут примерно в 2,6 раза длиннее исходного сообщения. Например, если вы зашифруете строку «my super secret data», которая имеет длину 21 символ, вы получите зашифрованную строку примерно в 55 символов (мы говорим «примерно», потому что длина зашифрованной строки увеличивается с шагом 64 бита, поэтому она нелинейна). Имейте это в виду при выборе механизма хранения данных. Например, куки могут хранить только 4 КБ информации.

Инициализация класса

Как и большинство других классов в CodeIgniter, класс Encrypt инициализируется в вашем контроллере с помощью метода $this->load->library():

$this->load->library('encrypt');

После загрузки объект библиотеки Encrypt будет доступен с помощью:

$this->encrypt

Справочник по классу

class CI_Encrypt
encode($string[, $key = ''])
Параметры:
  • $string (string) – Данные для шифрования
  • $key (string) – Ключ шифрования
Возвращает:

Зашифрованная строка

Тип возвращаемого значения:

string

Выполняет шифрование данных и возвращает его в виде строки. Пример:

$msg = 'My secret message';

$encrypted_string = $this->encrypt->encode($msg);

Вы можете необязательно передать ключ шифрования в качестве второго параметра, если не хотите использовать ключ из файла конфигурации:

$msg = 'My secret message';
$key = 'super-secret-key';

$encrypted_string = $this->encrypt->encode($msg, $key);
decode($string[, $key = ''])
Параметры:
  • $string (string) – Строка для дешифрования
  • $key (string) – Ключ шифрования
Возвращает:

Строка с открытым текстом

Тип возвращаемого значения:

string

Дешифрует закодированную строку. Пример:

$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';

$plaintext_string = $this->encrypt->decode($encrypted_string);

Вы можете необязательно передать ключ шифрования в качестве второго параметра, если не хотите использовать ключ из файла конфигурации:

$msg = 'My secret message';
$key = 'super-secret-key';

$encrypted_string = $this->encrypt->decode($msg, $key);
set_cipher($cipher)
Параметры:
  • $cipher (int) – Действительная константа шифра 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 (int) – Действительная константа режима 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 (string) – Строка для шифрования
  • $legacy_mode (int) – Действительная константа шифра PHP Mcrypt
  • $key (string) – Ключ шифрования
Возвращает:

Новая зашифрованная строка

Тип возвращаемого значения:

string

Позволяет повторно закодировать данные, которые были первоначально зашифрованы с помощью библиотеки шифрования CodeIgniter 1.x, чтобы они были совместимы с библиотекой шифрования CodeIgniter 2.x. Этот метод необходим только в том случае, если у вас есть постоянно хранящиеся зашифрованные данные, такие как файлы или база данных, и ваш сервер поддерживает Mcrypt. «Легкое» шифрование, такое как зашифрованные данные сеансов или временные зашифрованные данные flash, не требуют вмешательства с вашей стороны. Тем не менее, существующие зашифрованные сеансы будут уничтожены, так как данные, зашифрованные до версии 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 Ключ шифрования. Он обычно указывается в вашем файле конфигурации, как описано выше.

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/libraries/encrypt.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API