这个加密/解密功能如何工作


How can this encrypt / decrypt function work?

这是这个问题的后续。

PHP AES 加密/解密

我想知道IV。正如我所看到的,创建了一个随机 IV 用于分别解密和加密。并且它不会与要解密的数据一起传递。

如果我没记错的话,IV很可能是公开的,并与加密数据一起传输。但是,它应该是随机的,而不是一直重复使用(例如取一系列零)。

但是要成功解密,必须使用用于加密的相同IV。

在生成新的随机 IV 时,解密函数如何正常工作?

它确实有效,我测试了它...

该问题

中使用的模式(MCRYPT_MODE_ECB)忽略了通过的IV(如本问题所述)。

"欧洲央行不执行块之间的链接,因此无法使用IV。mcrypt 对所有模块使用相同的 APi。对于 ECB,IV 被简单地忽略,因为 ECB 模块具有以下定义为int _has_iv() { return 0; }

从 MSDN:

重要提示:不建议使用此模式,因为它为多个安全漏洞打开了大门。如果要加密的纯文本包含大量重复,则密文可以一次一个块地被破解。也可以使用块分析来确定加密密钥。此外,活动对手可以在不检测的情况下替换和交换单个块,这允许在其他点保存块并将其插入到流中而不会检测到。