CodeIgniter, руководство пользователя к версии 1.6.1


Класс Encryption

Класс Encryption (класс шифрования) представляет два способа шифрования. Это шифрование на основе XOR и случайного хеша, и использование библиотеки Mcrypt. Если библиотека Mcrypt не доступна на Вашем сервере, зашифрованные данные все еще будут обеспечивать определенную защиту и работать по более "лёгким" алгоритмам шифрования. Если Mcrypt доступна, то Ваши данные буду иметь высокую криптостойкость, а Вашем распоряжении будем множество алгоритмов, такие как AES, BlowFish или Tea.

Установка ключа

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

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

Для максимальной надежности ключ должен быть 128-битным (32 символа), содержать строчные и прописные литеры, символы и цифры. Он не должен быть простым текстом, так как его легко подобрать или выведать.

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

Для сохранения ключа в файле application/config/config.php откройте его и задайте параметр encryption_key:

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

Размер данных

Важно знать, что длина зашифрованных данных в среднем в 2.6 раза больше размера исходных данных. Например, если зашифровать строку "Супер-пупер секретные данные" длиной в 29 символов, получится шифрованная строка длиной 77 символов ( изменение длины строк неравномерно, так как при шифровании используются кластеры в 64 бита). Учитывайте данные сведения при проектировании защитной структуры. Cookies, например, могут содержать только 4 килобайта информации.

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

Как и многие другие классы в CodeIgniter, класс Encryption инициализируется функцией $this->load->library:

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

После загрузки, объект будет доступен по вызову $this->encrypt

$this->encrypt->encode()

Выполняет шифрование данных и представляет результат в виде строки. Например:

$msg = 'My secret message';

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

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

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

$this->encrypt->set_cipher();

Устанавливает алгоритм шифрования. По умолчанию MCRYPT_RIJNDAEL_256. Например:

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

На сайте php.net Вы можете увидеть список доступных алгоритмов.

Если вы хотите протестировать сервера на поддержку библиотеки Mcrypt, используйте следующий код:

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

$this->encrypt->set_mode();

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

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

Для списка всех режимов посетите сайт php.net/mcrypt.

$this->encrypt->sha1();

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

$hash = $this->encrypt->sha1('Some string');

Почти всегда на серверах с PHP есть поддержка хеширования по алгоритму SHA 1. В таком случае лучше использовать стандартную функцию:

$hash = sha1('Some string');

Если Ваш сервер не поддерживает эту функцию, то следует использовать функцию SHA 1 из данного класса.