这是对这个问题的跟进。
我想知道IV。正如我所看到的,为分别解密和加密创建了一个随机 IV。并且它不会与要解密的数据一起传递。
如果我没记错的话,IV 很可能是公开的,并与加密数据一起传输。然而,它应该是随机的,而不是一直重复使用(例如取一系列零)。
但是要成功解密,必须使用已用于加密的相同 IV。
生成新的随机 IV 时,解密功能如何正常工作?
它确实有效,我测试了它......
该问题 ( ) 中使用的模式忽略了通过的 IV(如本问题MCRYPT_MODE_ECB
中所指出的那样)。
“ECB 不执行块之间的链接,因此无法使用 IV。mcrypt 对所有模块使用相同的 APi。IV 被 ECB 简单地忽略,因为 ECB 模块具有以下定义为
int _has_iv() { return 0; }
来自MSDN:
重要提示:不推荐使用此模式,因为它为多种安全漏洞打开了大门。如果要加密的明文包含大量重复,密文一次破一个块是可行的。也可以使用块分析来确定加密密钥。此外,活跃的对手可以在不检测的情况下替换和交换单个块,这允许将块保存并在其他点插入流中而不会检测到。