初始化向量应该隐藏吗?

Is Initialization Vector should be hidden?

我正在创建一些用于保存文件的加密逻辑,并打算应用 AES 加密。

其实我已经在Online Encrypter实现了AES加密,并不是自己创建加密逻辑,所以我无法意识到IV的存在。

好不容易找到函数RijndaelManaged.GenerateIV().

我认为自动生成的 IV 应该存储在目标文件的某个地方,才能成功解密文件,但它应该像加密密钥一样隐藏。

可以只将 'plain' IV 附加到文件后面吗?如果不是,我如何才能更正确地存储和使用 IV?

对于每个使用密钥加密的明文,initialization vector (IV) 应该是 uniquerandom。但是,它不需要保密。您可以将 IV 附加到密文并以明文形式传输。

IV的原因是为了确保第一个块的加密是唯一的。例如,如果您使用 AES/CBC 使用相同的密钥加密相同的消息并且没有提供 IV,则输出将是相同的。引入 IV 意味着密文的第一个块(16 字节)将是唯一的,因此,整个消息密文将是不同的(由于 CBC 操作模式)。有关详细信息,请参阅维基百科关于 Block Cipher Modes of Operation 的文章。