2024 年 PHP 日本大会

Mcrypt 密码

这是一个目前 mcrypt 扩展支持的密码列表。有关支持的密码的完整列表,请参见mcrypt.h末尾的定义。mcrypt-2.2.x API 的一般规则是,您可以使用 MCRYPT_ciphername 从 PHP 访问密码。对于 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 (非免费)
  • MCRYPT_LOKI97 (仅限 libmcrypt > 2.4.x)
  • MCRYPT_MARS (仅限 libmcrypt > 2.4.x,非免费)
  • 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)

您必须(在CFBOFB模式下)或可以(在CBC模式下)向相应的密码函数提供初始化向量 (IV)。IV 必须是唯一的,并且在解密/加密时必须相同。对于存储为加密形式的数据,您可以采用数据存储索引的函数输出(例如,文件名 MD5 密钥)。或者,您可以将 IV 与加密数据一起传输(请参阅 Schneier 编写的《应用密码学》第 9.3 章 (ISBN 0-471-11709-9) 以了解此主题的讨论)。

添加注释

用户贡献的注释 5 条注释

robin
13 年前
mcrypt 2.4.x 及更高版本定义的 MCRYPT_TWOFISH 常量是 Twofish 的 256 位版本;它使用 1-32 字节密钥、16 字节 IV,并在 CBC 模式下输出 16 字节块。
Rob
10 年前
事实上,这些常量可以作为函数 mcrypt_module_open() 的输入使用,因为 mcrypt.php 包含将这些常量映射到从 mcrypt_list_algorithms() 获得的相应字符串值的定义。
Mark
12 年前
注意,这些不是您在函数 mcrypt_module_open 中用于指定算法的名称。

使用 mcrypt_list_algorithms 获取正确的名称。
stanislav dot eckert at vizson dot de
9 年前
IDEA 算法的最新专利已于 2012 年过期,该密码现在已无专利保护,可自由使用。
dan at zaph dot com
9 年前
可解释性

mcrypt 不支持 PKCS#7 填充,它使用非标准且不安全的空填充。这意味着对于与大多数其他实现的互操作性,必须在加密之前添加 PKCS#7 填充和/或在解密之后移除。这是互操作性问题的主要来源。

当与 AES 互操作时,mcrypt 算法必须指定为 MCRYPT_RIJNDAEL_128,因为 AES 只支持 128 位的块大小。通常会混淆这一点,因为它并未指定密钥大小。
To Top