PHP-Nuke по-русски    Главная
Начальная
страница
 Клуб
Русский
клуб
 Разделы
Тематические
разделы
 Ссылки
Каталог
сайтов
 Файлы
Каталог
программ
 Школа
Практические
занятия
 Форум
Форумы
поддержки
Учебник РНР
Назад Вперёд

LV. Функции шифровки Mcrypt

Это интерфейс с библиотекой mcrypt, который поддерживает широкий набор алгоритмов, таких как DES, TripleDES, Blowfish (по умолчанию), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 и режимов шифровки GOST в CBC, OFB, CFB и ECB. Дополнительно он поддерживает RC6 и IDEA, которые считаются "non-free".

Mcrypt можно использовать для шифровки и дешифровки вышеприведёнными шифрами. Если вы связались с библиотекой libmcrypt-2.2.x, четыре важные команды mcrypt (mcrypt_cfb(), mcrypt_cbc(), mcrypt_ecb() и mcrypt_ofb()) могут оперировать в двух режимах, которые называются MCRYPT_ENCRYPT и MCRYPT_DECRYPT, соответственно.
Пример 1. Шифровка input-значения шифром TripleDES под 2.2.x в режиме ECB
<?php
$key = "this is a very secret key";
$input = "Let us meet at 9 o'clock at the secret place.";

$encrypted_data = mcrypt_ecb (MCRYPT_3DES, $key, $input, MCRYPT_ENCRYPT);
?>

Это пример даст данные, зашифрованные как строка в $encrypted_data.

Если связаны с библиотекой libmcrypt 2.4.x или 2.5.x, эти функции также будут доступны, но рекомендуется использовать продвинутые функции.
Пример 2. Шифровка input-значения шифром TripleDES под 2.4.x и выше в режиме ECB
<?php
$key = "this is a very secret key";
$input = "Let us meet at 9 o'clock at the secret place.";

$td = mcrypt_module_open ('tripledes', '', 'ecb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);
mcrypt_generic_init ($td, $key, $iv);
$encrypted_data = mcrypt_generic ($td, $input);
mcrypt_generic_end ($td);
?>

Это пример даст данные, зашифрованные как строка в$encrypted_data. Полный пример см. в описании mcrypt_module_open().

Требования

Эти функции работают с использованием mcrypt.

Если вы связаны с библиотекой libmcrypt 2.4.x или выше, поддерживаются следующие дополнительные алгоритмы блока: CAST, LOKI97, RIJNDAEL, SAFERPLUS, SERPENT, и шифровальщики потока: ENIGMA (crypt), PANAMA, RC4 и WAKE. С библиотекой libmcrypt 2.4.x или выше доступен также режим шифровки nOFB.

Установка

Загрузите libmcrypt-x.x.tar.gz отсюда и следуйте инструкциям по установке. Вам необходимо скомпилировать PHP с параметром --with-mcrypt, чтобы подключить данное расширение. Убедитесь, что вы компилируете libmcrypt с опцией --disable-posix-threads.

Типы ресурсов

Это расширение не определяет никакие типы ресурсов.

Предопределённые константы

Mcrypt может работать с четырьмя режимами шифровки (CBC, OFB, CFB и ECB). Если связь имеется с библиотекой libmcrypt-2.4.x или выше, эти функции могут также работать с блок-режимом шифровки nOFB и в режиме STREAM. Ниже вы найдёте список всех поддерживаемых режимов шифровки с константами, определёнными для данного режима. Более полную справку и обсуждение вы найдёте в Applied Cryptography by Schneier (ISBN 0-471-11709-9).

  • MCRYPT_MODE_ECB (electronic codebook/электронная кодовая книга) подходит для произвольных данных, таких как шифрование других ключей. Поскольку данные здесь случайны и кратки, недостатки ECB имеют положительный побочный эффект.

  • MCRYPT_MODE_CBC (cipher block chaining) специально предназначен для шифрования файлов; безопасность значительно выше, чем у ECB.

  • MCRYPT_MODE_CFB (cipher feedback) - наилучший режим для шифровки байтовых потоков, где должны шифроваться отдельные байты.

  • MCRYPT_MODE_OFB (output feedback, в 8bit) сравним с CFB, но используется в приложениях, где недопустима передача ошибок. Небезопасен (поскольку работает в 8-битном режиме), поэтому использовать его не рекомендуется.

  • MCRYPT_MODE_NOFB (output feedback, в nbit) сравним с OFB, но более безопасен, поскольку оперирует с размером блоков по алгоритму.

  • MCRYPT_MODE_STREAM - дополнительный режим для включения алгоритмов потока вроде WAKE или RC4.

Вот список шифров, которые в настоящее время поддерживаются расширением mcrypt. Полны список см. в определениях в конце файла mcrypt.h. Общее правило для mcrypt-2.2.x API таково: вы можете получить доступ к шифру из PHP с помощью MCRYPT_ciphername. С libmcrypt-2.4.x и libmcrypt-2.5.x API эти константы также работают, но можно специфицировать имя шифра как строку с вызовом mcrypt_module_open().

  • MCRYPT_3DES

  • MCRYPT_ARCFOUR_IV (только libmcrypt > 2.4.x)

  • MCRYPT_ARCFOUR (только libmcrypt > 2.4.x)

  • MCRYPT_BLOWFISH

  • MCRYPT_CAST_128

  • MCRYPT_CAST_256

  • MCRYPT_CRYPT

  • MCRYPT_DES

  • MCRYPT_DES_COMPAT (только libmcrypt > 2.2.x)

  • MCRYPT_ENIGMA (только libmcrypt > 2.4.x, псевдоним для MCRYPT_CRYPT)

  • MCRYPT_GOST

  • MCRYPT_IDEA (non-free/не свободный ресурс)

  • MCRYPT_LOKI97 (только libmcrypt > 2.4.x)

  • MCRYPT_MARS (только libmcrypt > 2.4.x, non-free)

  • MCRYPT_PANAMA (только libmcrypt > 2.4.x)

  • MCRYPT_RIJNDAEL_128 (только libmcrypt > 2.4.x)

  • MCRYPT_RIJNDAEL_192 (только libmcrypt > 2.4.x)

  • MCRYPT_RIJNDAEL_256 (только libmcrypt > 2.4.x)

  • MCRYPT_RC2

  • MCRYPT_RC4 (только libmcrypt > 2.2.x)

  • MCRYPT_RC6 (только libmcrypt > 2.4.x)

  • MCRYPT_RC6_128 (только libmcrypt > 2.2.x)

  • MCRYPT_RC6_192 (только libmcrypt > 2.2.x)

  • MCRYPT_RC6_256 (только libmcrypt > 2.2.x)

  • MCRYPT_SAFER64

  • MCRYPT_SAFER128

  • MCRYPT_SAFERPLUS (только libmcrypt > 2.4.x)

  • MCRYPT_SERPENT(только libmcrypt > 2.4.x)

  • MCRYPT_SERPENT_128 (только libmcrypt > 2.2.x)

  • MCRYPT_SERPENT_192 (только libmcrypt > 2.2.x)

  • MCRYPT_SERPENT_256 (только libmcrypt > 2.2.x)

  • MCRYPT_SKIPJACK (только libmcrypt > 2.4.x)

  • MCRYPT_TEAN (только libmcrypt > 2.2.x)

  • MCRYPT_THREEWAY

  • MCRYPT_TRIPLEDES (только libmcrypt > 2.4.x)

  • MCRYPT_TWOFISH (для старых версий mcrypt 2.x или для mcrypt > 2.4.x )

  • MCRYPT_TWOFISH128 (TWOFISHxxx доступны в новых версиях 2.x, но не в версиях 2.4.x)

  • MCRYPT_TWOFISH192

  • MCRYPT_TWOFISH256

  • MCRYPT_WAKE (только libmcrypt > 2.4.x)

  • MCRYPT_XTEA (только libmcrypt > 2.4.x)

Вы обязаны (в режимах CFB и OFB) или можете (в режиме CBC) поддерживать вектор инициализации /initialization vector (IV) для соответствующей функции шифровки. Этот IV обязан быть уникальным и обязан быть тем же самым при дешифровке/шифровке. Для данных, которые хранятся в шифрованном виде, вы можете получить вывод функции индекса, под которым данные хранятся (например, MD5-ключ имени файла). Альтернативно вы можете передать IV вместе с шифрованными данными (см. в Главе 9.3 в Applied Cryptography by Schneier (ISBN 0-471-11709-9) обсуждение этого вопроса).

Содержание
mcrypt_cbc - шифрует/дешифрует данные в режиме CBC
mcrypt_cfb - шифрует/дешифрует данные в режиме CFB
mcrypt_create_iv - создаёт вектор инициализации (IV) из произвольного ресурса
mcrypt_decrypt - дешифрует crypttext с заданными параметрами
mcrypt_ecb - шифрует/дешифрует данные в режиме ECB mode
mcrypt_enc_get_algorithms_name — возвращает имя открытого алгоритма
mcrypt_enc_get_block_size — возвращает размер блока открытого алгоритма
mcrypt_enc_get_iv_size — возвращает размер IV открытого алгоритма
mcrypt_enc_get_key_size — возвращает максимальны поддерживаемый keysize/размер ключа открытого режима
mcrypt_enc_get_modes_name — возвращает имя открытого режима
mcrypt_enc_get_supported_key_sizes — возвращает массив с поддерживаемыми размерами ключей открытого алгоритма
mcrypt_enc_is_block_algorithm_mode - проверяет, работает ли шифровка открытого режима с блоками
mcrypt_enc_is_block_algorithm - проверяет, является ли алгоритм открытого режима алгоритмом блока
mcrypt_enc_is_block_mode - проверяет, выводит ли открытый режим блоки
mcrypt_enc_self_test — эта функция запускает самопроверку в открытом модуле
mcrypt_encrypt - шифрует обычный текст с заданными параметрами
mcrypt_generic_deinit — эта функция деинициализирует модуль шифровки
mcrypt_generic_end — эта функция прерывает шифровку
mcrypt_generic_init — эта функция инициализирует все буферы, необходимые для шифрования
mcrypt_generic — эта функция шифрует данные
mcrypt_get_block_size - получает размер блока специфицированного шифра
mcrypt_get_cipher_name - получает имя специфицированного шифра
mcrypt_get_iv_size — возвращает размер IV, принадлежащего специфицированной комбинации шифр/режим
mcrypt_get_key_size - получает размер ключа специфицированного шифра
mcrypt_list_algorithms - получает массив всех поддерживаемых шифров
mcrypt_list_modes - получает массив всех поддерживаемых режимов
mcrypt_module_close - закрывает mcrypt-модуль
mcrypt_module_get_algo_block_size — возвращает размер блока специфицированного алгоритма
mcrypt_module_get_algo_key_size — возвращает максимальный поддерживаемый keysize открытого режима
mcrypt_module_get_supported_key_sizes — возвращает массив с поддерживаемыми keysizes открытого алгоритма
mcrypt_module_is_block_algorithm_mode - эта функция возвращает, является ли специфицированный модуль алгоритмом блока, или нет
mcrypt_module_is_block_algorithm — эта функция проверяет, является ли специфицированный алгоритм алгоритмом блока
mcrypt_module_is_block_mode - эта функция возвращает, выводит специфицированный режим блоки, или нет
mcrypt_module_open — эта функция открывает модуль алгоритма и используемый режим
mcrypt_module_self_test — эта функция запускает самопроверку в специфицированном модуле
mcrypt_ofb - шифрует/дешифрует данные в режиме OFB
mdecrypt_generic — эта функция дешифрует данные

НазадОглавление Вперёд
mcal_week_of_yearВверх mcrypt_cbc

© RigaNet - Internet studio
For Web site issues, contact the Web master.

Rambler's Top100 Рейтинг@Mail.ru RigaNet