PHP:Mcrypt - 哪种模式?

时间:2011-02-24 17:43:39

标签: php encryption mcrypt

我一直在测试PHP的mcrypt函数中提供的各种modes ECB 是大多数教程中使用的模式,但刚刚链接的页面和some users都不推荐使用,因此我认为 CBC CFB 应该可以解决问题。

PHP文档不是太胖了,它与mcrypt可用的不同模式的比较相反,而是指的是'施奈尔应用密码学'的书,我不是现在太热衷于购买了。

那么我想使用哪种mcrypt模式?为什么?

1 个答案:

答案 0 :(得分:22)

mcrypt实际上实现的模式多于listed,您可以使用字符串名称来访问它们:

  • cbc - CBC 模式
  • cfb - 8位 CFB 模式;
  • ncfb - 块大小 CFB 模式;
  • nofb - OFB 模式(不是ofb);
  • ctr - 点击率模式。

模式的实现细节不同,因此它们的适用性取决于您的数据和环境。

<强>填充

  • CBC 模式只加密完整的块,因此除非您实现自己的填充,否则mcrypt会以零字节填充您的明文。

  • CFB OFB CTR 模式可以加密任意长度的邮件。

初始化向量

  • CBC CFB 模式需要随机IV(不要使用MCRYPT_RAND)。

  • OFB 模式只需要一个唯一的IV(例如全局计数器,如果永远不会修改或删除行,则可能是数据库主键)。

  • CTR 要求每个计数器块都是唯一的(不仅仅是消息的IV,这是第一个计数器块,但其余的是通过将计数器块递增1来形成的消息的每个块)。

NIST recommendations

中的更多信息

在PHP中性能上的差异应该是不重要的,例如加密或解密是否可以并行化以及每个块使用多少次密码迭代(通常是一次,但在8位 CFB 模式)。

malleability存在差异,这些差异应该不重要,因为应用MAC

他们的安全性可能存在差异,但为此你应该咨询cryptographer