string gzencode(string data, integer level, integer mode)
Функция gzencode сжимает данные с помощью библиотеки gzip. Необязательный аргумент level задает уровень сжатия от 0 до 9, причем 9 - высшая степень сжатия. Третий аргумент задает метод сжатия.

Листинг 12.62. Функции gzdeflate, gzinflate

<?php
$text = "Core PHP Programming"; $gzText = gzdeflate($text, 9); print(bin2hex($gzText) . "<br>");
//отбросить первые 10 байтов (заголовок) и последние 4 байта (контрольная сумма)
print(gzinflate($gzText) . "<br>");

 ?> 

Метод FORCE_GZIP используется для задания режима gzip, который устанавливается по умолчанию, метод FORCE_DEFLATE - для задания режима zlib. Возвращаемое значение включает в себя заголовок gzip и контрольную сумму в конце. Если необходимо развернуть данные с помощью функции gzinflate, следует их отбросить (листинг 12.63).

| Листинг 12.63. Функция gzencode_
<?php
$text = "Core PHP Programming"; $gzText = gzencode($text, 9); print(bin2hex($gzText) . "<br>");
//отбросить первые 10 байтов ( заголовок) и последние 4 байта ( контрольная сумма)
print(gzinflate(substr($gzText, 10, -4)) . "<br>");
?>

string gzinflate(string data, integer length)
Функция gzinflate предназначена для разворачивания данных, сжатых с помощью алгоритма deflate. Необязательный аргумент length устанавливает максимальный размер для разворачиваемых данных.
string gzuncompress(string data, integer length)
Функция gzuncompress предназначена для разворачивания данных, сжатых функцией gzcompress. Необязательный аргумент length устанавливает максимальный размер для разворачиваемых данных.
12.5. Кодирование
Кодировка - это процесс преобразования информации в нечитаемый формат и из нечитаемого формата. Некоторые алгоритмы просто скремблируют текст, другие предусматривают последующее декодирование. PHP имеет возможность работать с C-функцией crypt и расширением, работающим с библиотекой mcrypt.
Функции mcrypt опираются на одноименную библиотеку, написанную Никосом Мавроянопулосом (Nikos Mavroyanopoulos). Он предложил усовершенствованную систему кодирования данных. С этим проектом можно ознакомиться по адресу <http://mcrypt.hellug.gr/>. Саша Шуман добавил возможности использования в PHP библиотеки mycrypt. Дерик Ретанс (Derick Rethans) добавил возможность поддержки нового API-интерфейса, имеющегося в mcrypt 2.4.4.
Тема криптографии выходит за рамки настоящей книги. Некоторые концепции, описанные в этом разделе, требуют знакомства с последними разработками в теории криптографии. Лучше всего начинать изучение криптографии с FAQ-файла группы новостей sci.crypt сети Usenet (<http://www.faqs.org/faqs/cryptography-faq/>). Еще одним источником может стать книга Вильяма Сталлингза (William Stallings) Cryptography and Network Security: Principles and Practice, опубликованная в издательстве Prentice Hall. 
string crypt(string text, string salt)
Функция crypt (листинг 12.64) шифрует строку, используя C-функцию crypt, которая обычно применяет стандартное DES-шифрование, но это зависит от конкретной операционной системы. Аргумент text возвращается в зашифрованном виде. Аргумент salt является необязательным. PHP создает случайное значение для этого аргумента, если он не был задан явным образом. Более полная информация о функции crypt приводится на соответствующей man-странице. Заметим, что данные, зашифрованные с помощью функции crypt, расшифровать невозможно. Эта функция обычно используется для шифрования сохраняемых паролей, когда необходима авторизация. При этом процедура аутентификации заключается в следующем: запрашивается пароль, затем он шифруется и в зашифрованном виде сравнивается с паролем, зашифрованным ранее.
В зависимости от операционной системы алгоритм DES может иметь альтернативу. Аргумент salt предназначен для определения используемого алгоритма. Двухсимвольное значение аргумента salt используется для стандартного шифрования DES. Девятисимвольное значение аргумента salt задает расширенный алгоритм шифрования DES. Двенадцатисимвольное значение аргумента salt определяет шифрование MD5. И шестнадцатисимвольное значение аргумента salt задает алгоритм "блоуфиш".
Все имеющиеся алгоритмы шифрования задаются при компиляции PHP. Следующие константы определяют возможность применения четырех алгоритмов: CRYPT_STD_DES, CRYPT_EXT_DES, CRYPT_MD5, CRYPT_BLOWFISH. Для этого им задаются значения TRUE или FALSE.

j Листинг 12.64. Функция crypt_
<?php
$password = "secret";
if(CRYPT_MD5) {
$salt = "leonatkinson";
print("Using MD5: ");
}
else
{
$salt = "cp";
print("Using Standard DES: ");
}
print(crypt($password, $salt));

string mcrypt_create_iv(integer size, integer source)
Функция mcrypt_create_iv предназначена для создания вектора инициализации. Аргументом size задается значение, соответствующее алгоритму шифрования, которое устанавливается с помощью функции mcrypt_get_block_size. Аргументу source может задаваться одна из трех следующих констант: MCRYPT_DEV_RANDOM использует случайные числа из файла /dev/random; MCRYPT_DEV_URANDOM использует случайные числа из файла /dev/urandom; MCRYPT_RAND использует случайные числа, полученные с помощью функции rand.