Получите помощь, поддержку и профессиональное общение в Клубе CodeIgniter

# CodeIgniter User Guide Version 2.1.3

Search User Guide

# Класс шифрования

Класс Encryption предоставляет средства для двунаправленного шифрования. Он использует схему, либо компилирует сообщение, используя случайно хешированную схему кодирования XOR, или библиотеку Mcrypt. Если Mcrypt недоступна на вашем сервере, декодированное сообщение все-равно будет обеспечивать некоторую степень безопасности, для зашифрованных сессий и других «легких» целей. Если Mcrypt доступна, вы получаете высокую степень безопасности для хранения данных.

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

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

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

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

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

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

`$config['encryption_key'] = "ТУТ ВАШ КЛЮЧ";`

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

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

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

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

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

Загруженный объект доступен через: $this->encrypt

## $this->encrypt->encode()

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

`$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);`

## $this->encrypt->decode()

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

`$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);`

## $this->encrypt->set_cipher();

Позволяет вам установить шифр Mcrypt. По умолчанию используется `MCRYPT_RIJNDAEL_256`. Пример:

`$this->encrypt->set_cipher(MCRYPT_BLOWFISH);`

Пожалуйста посетите php.net, чтобы получить список доступных шифров.

Если вы хотите вручную протестировать, поддерживает ли ваш сервер Mcrypt, вы можете использовать:

`echo ( ! function_exists('mcrypt_encrypt')) ? 'Нет поддержки' : 'Поддержка mcrypt имеется';`

## $this->encrypt->set_mode();

Позволяет вам установить режим Mcrypt. По умолчанию используется `MCRYPT_MODE_CBC`. Пример:

`$this->encrypt->set_mode(MCRYPT_MODE_CFB);`

Пожалуйста посетите php.net, чтобы получить список доступных режимов шифров.

## $this->encrypt->sha1();

Функция кодирования SHA1. Передайте ей строку, и она вернет вам 160-битный односторонний хеш. Примечание: SHA1, как и MD5, не дешифруются. Пример:

`$hash = $this->encrypt->sha1('Строка для шифрования');`

Много инсталляций PHP имеют поддержку SHA1 по умолчанию. Если все, что вам нужно, это получить хеш, вы можете использовать родную функцию:

`$hash = sha1('Строка для шифрования');`

Если ваш сервер не поддерживает SHA1, вы можете использовать предоставленную фреймворком функцию.

## $this->encrypt->encode_from_legacy(`$orig_data`, `$legacy_mode` = MCRYPT_MODE_ECB, `$key` = '');

Позволяет вам перекодировать данные, которые ранее были зашифрованы с CodeIgniter 1.x, в новый алгоритм, который используется в CodeIgniter 2.x. Это требуется только в том случае, если вы храните данные в БД, зашифрованные старым способом. Использование «легких» методов шифрования, как, к примеру, хранение сессий, не требует перекодирования. Существующие сессии будут удалены.

Почему предлагается только метод для перекодирования данных, вместо поддержки наследования методов для кодирования и расшифровки? Алгоритмы библиотеки Encription были улучшены в CodeIgniter 2.x, для увеличения производительности и безопасности, поэтому мы не хотим поощрять использование старых методов. Конечно вы можете расширить библиотеку Encription, если вы хотите заменить новые методы старыми, но это решение разработчик должен делать осторожно, если оно вообще имеет смысл.

`$new_data = $this->encrypt->encode_from_legacy(`$old_encrypted_string`);`

Параметр | Значение по умолчанию | Описание
--- | --- | ---
$orig_data | Нет | Оригинальные данные, зашифрованные библиотекой Encription CodeIgniter 1.x
$legacy_mode | MCRYPT_MODE_ECB | Режим Mcrypt, который был использован для генерации оригинально зашифрованных данных. CodeIgniter 1.x по умолчанию делал MCRYPT_MODE_ECB, и можно предположить, что значение по умолчанию будет приемлемым.
$key | Нет | Ключ шифрования. Обычно указывается в конфигурационном файле, как описано выше.

### Поделиться

Переведено в компании Аринт.

# Спасибо!

Вы тоже можете оказать помощь проекту! Как это сделать?

## Помощь и поддержка

Вы можете задать вопросы и получить ответы и советы от гуру CodeIgniter и веб-разработки: вступайте в Клуб CodeIgniter