使用AES非对称加密解密时存储IV

Storing IV when using AES asymmetric encryption and decryption

我正在查看 C# AES 非对称加密和解密示例 here,但不确定我是否应该将 IV 存储在安全的地方(也加密??)。或者我可以将它附加到加密文本以供以后解密时使用。从对 AES 的简短阅读来看,它似乎根本不需要解密,但我不确定我做对了,而且 aes.CreateDecryptor(keyBytes, iv) 需要它作为参数。

我使用一个密钥进行所有加密。

IV.Concat(cipherText)传输加密数据是相当标准的。将 IV 放在一边也是相当标准的,例如 PKCS#5.

IV-on-the-side 方法与 .NET 想要处理数据的方式更匹配,因为将 IV 切分以将其单独传递给 IV 参数(或 属性), 然后对密文(或恢复明文)进行更复杂的分片操作

但 IV 通常以任何一种方式明文传输。

因此,将其粘合在一起,或将其作为一个单独的列...任何更适合您的程序和结构的内容。

答:只要内容已经用它加密,解密就需要IV。您不需要加密或隐藏 IV。可能是 public.

--

IV 的目的是与您正在使用的密钥相结合,所以就像您用不同的 "final key" 加密每个 "block of data" 然后它保证密码数据(加密的)在加密(和解密)过程中总是不同的。

这很好地说明了发生的情况如果您不使用 IV。

基本上,加密过程是通过加密块中的输入数据来完成的。所以在这个例子的加密过程中,图像的所有具有相同颜色的部分(假设是白色背景)将输出相同的 "cipher data" 如果你总是使用相同的密钥,那么仍然可以找到一个模式然后你没有按要求隐藏图片。

因此,将 不同的 额外数据(IV)组合到 each 块的密钥就像您使用不同的 "final key"对于每个块,那么你解决了你的问题。