The MCRYPT_TWOFISH constant when defined by mcrypt version 2.4.x and later is the 256 bit version of Twofish; it uses a 1-32 byte key, a 16 byte IV, and outputs 16 byte blocks in CBC mode.
Здесь перечислены шифры, поддерживаемые модулем mcrypt. Для полного списка поддерживаемых шифров смотрите список в конце файла mcrypt.h. Главное правило API mcrypt-2.2.x API состоит в том, что доступ к шифрам из PHP осуществляется путём использования констант MCRYPT_имя_шифра. Эти константы также работают с AI libmcrypt-2.4.x и libmcrypt-2.5.x, но также можно задать шифр по имени с помощью функции mcrypt_module_open().
Вы должны (в режимах CFB
и OFB
)
или можете (в режиме CBC
)
предоставить инициализирующий вектор (IV) для
выбранной функции шифрования. IV должен быть
уникальным и должен быть одинаковым для шифрования и
дешифрования. Для данных, которые хранятся в
шифрованном виде вы можете получить вывод функции
для индекса, под которым данные были сохранены
(например, MD5 хеш имени файла). Или вы можете
передать IV вместе с зашифрованными данными (смотрите
раздел 9.3 Applied Cryptography by Schneier (ISBN 0-471-11709-9)).
The MCRYPT_TWOFISH constant when defined by mcrypt version 2.4.x and later is the 256 bit version of Twofish; it uses a 1-32 byte key, a 16 byte IV, and outputs 16 byte blocks in CBC mode.
These constants can in fact be used as input to the function mcrypt_module_open() because mcrypt.php contains defines that map these constants to the appropriate string values obtained from mcrypt_list_algorithms().
Note, these are not the names you use in the function mcrypt_module_open to specify the algorithm.
Use mcrypt_list_algorithms to get the right names to stick in there
The latest patents for the IDEA algorithm have expired in 2012 and the cipher is now patent-free and free to use.
Interpretability:
mcrypt does not support PKCS#7 padding, it uses non-standard and insecure null padding. This means that for interoperability with most other implementations PKCS#7 padding will have to be added prior to encryption and/or removed after decryption. This is a major source of interoperability issues.
When interoperating with AES the mcrypt algorithm must be specified as MCRYPT_RIJNDAEL_128 since AES only supports a block size of 128-bits. There is often confusion that this specifies the key size which it does not.