|
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 - эта функция дешифрует данные
|
|