PHP:Mcrypt - 哪种模式?

2022-08-30 23:30:52

我一直在测试PHP函数中可用的各种模式ECB是大多数教程中使用的模式,但只是链接的页面和一些用户都不建议这样做,所以我认为CBCCFB都应该这样做。mcrypt

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

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


答案 1

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

  • cbc全血细胞计数模式
  • cfb– 8 位 CFB 模式;
  • ncfb– 块大小的CFB模式;
  • nofbOFB 模式(非ofb);
  • ctr点击率模式。

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

填充

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

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

初始化向量

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

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

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

更多信息请参阅 NIST 建议

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

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

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


答案 2

推荐