当由 mcrypt 2.4.x 及更高版本定义时,MCRYPT_TWOFISH 常量是 Twofish 的 256 位版本;它使用 1-32 字节密钥、16 字节 IV,并在 CBC 模式下输出 16 字节块。
以下是 mcrypt 扩展当前支持的密码列表。有关支持密码的完整列表,请参阅 mcrypt.h 末尾的定义。使用 mcrypt-2.2.x API 的一般规则是,您可以使用 MCRYPT_ciphername 从 PHP 访问密码。使用 libmcrypt-2.4.x 和 libmcrypt-2.5.x API,这些常量也适用,但可以使用 mcrypt_module_open() 函数以字符串形式指定密码名称。
您必须(在 CFB
和 OFB
模式下)或可以(在 CBC
模式下)为相应的密码函数提供初始化向量 (IV)。IV 必须是唯一的,并且在解密/加密时必须相同。对于存储为加密形式的数据,您可以使用存储数据的索引的函数输出(例如,文件名的 MD5 密钥)。或者,您可以将 IV 与加密数据一起传输(有关此主题的讨论,请参阅 Schneier 编写的《应用密码学》第 9.3 章 (ISBN 0-471-11709-9))。
当由 mcrypt 2.4.x 及更高版本定义时,MCRYPT_TWOFISH 常量是 Twofish 的 256 位版本;它使用 1-32 字节密钥、16 字节 IV,并在 CBC 模式下输出 16 字节块。
事实上,这些常量可以作为函数 mcrypt_module_open() 的输入,因为 mcrypt.php 包含将这些常量映射到从 mcrypt_list_algorithms() 获取的适当字符串值的定义。
可解释性
mcrypt 不支持 PKCS#7 填充,它使用非标准且不安全的空填充。这意味着为了与大多数其他实现互操作,必须在加密之前添加 PKCS#7 填充,或者在解密之后删除。这是互操作性问题的主要来源。
在与 AES 互操作时,mcrypt 算法必须指定为 MCRYPT_RIJNDAEL_128,因为 AES 仅支持 128 位的块大小。经常会混淆这一点,因为它没有指定密钥大小。