17

我一直在测试PHP函数中可用的各种模式。ECB 是大多数教程中使用的模式,但不被刚刚链接的页面和一些用户推荐,所以我认为CBCCFB应该可以解决问题。mcrypt

PHP 文档在比较可用的不同模式时并不太厚mcrypt,而是参考了“Schneier 的应用密码学”一书,我目前不太热衷于购买。

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

4

1 回答 1

22

mcrypt实际上实现了比列出更多的模式,您可以使用字符串名称来访问它们:

  • cbcCBC模式
  • cfb– 8 位CFB模式;
  • ncfb– 块大小CFB模式;
  • nofbOFB模式(不是ofb);
  • ctr点击率模式。

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

填充

  • CBC模式只加密完整的块,所以mcrypt用零字节填充你的明文,除非你实现自己的填充。

  • CFBOFBCTR模式加密任意长度的消息。

初始化向量

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

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

  • CTR要求每个计数器块是唯一的(不仅仅是消息的 IV,它是第一个计数器块,还有其余的,由消息的每个块的计数器块增加 1 形成)。

NIST 建议中的更多信息。

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

延展性存在差异,这应该不重要,因为您应用MAC

它们的安全性可能存在差异,但为此您应该咨询密码学家

于 2011-02-24T20:02:38.637 回答