Класс 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 из данного класса.