我一直在测试PHP的mcrypt
函数中可用的各种modes。 ECB在大多数教程中使用的模式,但不建议在刚链接页面和some users两个,所以我认为,要么CBC或CFB应该做的伎俩。PHP:Mcrypt - 哪种模式?
的PHP文件是不是太胖,在它的适用于mcrypt
不同模式的比较,而是指“由Schneier的应用密码学”,这我不是太热衷购买的那一刻书的。
那么我想使用哪种mcrypt
模式?为什么?
我一直在测试PHP的mcrypt
函数中可用的各种modes。 ECB在大多数教程中使用的模式,但不建议在刚链接页面和some users两个,所以我认为,要么CBC或CFB应该做的伎俩。PHP:Mcrypt - 哪种模式?
的PHP文件是不是太胖,在它的适用于mcrypt
不同模式的比较,而是指“由Schneier的应用密码学”,这我不是太热衷购买的那一刻书的。
那么我想使用哪种mcrypt
模式?为什么?
mcrypt
实际上比listed实现了多种模式,你可以使用字符串名称来访问它们:
cbc
- CBC模式cfb
- 8位CFB模式;ncfb
- 块大小CFB mode;nofb
- OFB mode(not ofb
);ctr
- CTR mode。这些模式在实现细节上有所不同,所以它们的适用性取决于您的数据和环境。
填充:除非你实现你自己的填充
CBC模式只能加密的完全块,所以mcrypt
垫您与零个字节明文。
CFB,OFB和CTR模式加密任何长度的消息。
初始化向量:
CBC和CFB模式需要随机IV(不使用MCRYPT_RAND
)。
OFB模式仅仅需要唯一的IV(例如全局计数器,如果行从未被修改或删除,可能是数据库主键)。
CTR要求每个计数器块是唯一的(不只是消息,该消息是第一计数器块的IV,但其余的,通过递增计数器块为消息的每个块形成由1) 。
更多相关内容在NIST recommendations。
有在性能上的差异应该是不重要在PHP,如是否加密或解密可以并行和多少密码迭代每块(通常在8位CFB模式之一,但16)被使用。
malleability有差异,应该是不重要的,因为你将应用MAC。
而且有可能在其安全上的差异,但是,你应该咨询cryptographer。
感谢您的广泛回复@aaz! – Industrial 2011-02-26 13:29:36
@aaz - 你说“(不要使用MCRYPT_RAND)”我问为什么? – buggedcom 2011-10-06 19:57:53
@buggedcom - 这些模式的安全性取决于IV是不可预测的。 'MCRYPT_RAND'使用PHP随机数生成器,它可能满足或不满足这个要求。它可能连接到硬件RNG,或者它可能返回π的数字。但是你可以在你的系统上检查['man 4 random'](http://linux.die.net/man/4/random),看看'/ dev/random'是用来产生加密材料的,默认的'MCRYPT_DEV_RANDOM'使用它。 – aaz 2011-10-08 22:56:29
不是重复而是乐于助人后http://stackoverflow.com/questions/2809855/which-php-mcrypt-cipher-is-safest喜凯文) – kjy112 2011-02-24 17:45:34
是的,我知道后,这是我自己的,但我还是很怀念列出可用于'mcrypt'的不同模式的优点/缺点。为什么选择_CBC_ over _CFC_? – Industrial 2011-02-24 17:46:31