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.
Aqui está uma lista de cifras que são atualmente suportadas pela extensão mcrypt. Para uma lista completa de cifras suportadas, consulte as definições em mcrypt.h. A regra geral com a API mcrypt-2.2.x é que você pode acessar a cifra no PHP com MCRYPT_ciphername. Com as APIs libmcrypt-2.4.x e libmcrypt-2.5.x, essas constantes também funcionam, mas é possível especificar o nome da cifra como uma string com uma chamada para mcrypt_module_open().
Você deve (em modo CFB
e OFB
)
ou pode (em modo CBC
) fornecer um
vetor de inicialização (IV) para a função de cifra respectiva. O
IV deve ser único e deve ser o mesmo ao
descriptografar/criptografar. Com dados que são armazenados criptografados, você
pode pegar a saída de uma função do índice sob o qual o
dados são armazenados (por exemplo, a chave MD5 do nome do arquivo).
Alternativamente, você pode transmitir o IV junto com os dados criptografados
(consulte o capítulo 9.3 de Applied Cryptography by Schneier (ISBN 0-471-11709-9) para uma
discussão sobre esse tópico).
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.