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

Encryption 使用AES非对称加密和解密时存储IV,encryption,cryptography,aes,private-key,Encryption,Cryptography,Aes,Private Key,我正在看一个C#AES非对称加密和解密示例,不确定是否应该将IV存储在安全的地方(也加密??)。或者,我可以将其附加到加密文本,以便在以后需要解密时使用。从一篇关于AES的短文来看,解密似乎根本不需要它,但我不确定我是否正确,而且AES.CreateDecryptor(keyBytes,iv)需要它作为参数 我对所有加密都使用一个密钥。将加密数据作为IV.Concat(密文)传输是相当标准的。把静脉注射放在一边也是相当标准的,就像在 IV-on-The-side方法与.NET希望处理数据的方式更

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


我对所有加密都使用一个密钥。

将加密数据作为
IV.Concat(密文)
传输是相当标准的。把静脉注射放在一边也是相当标准的,就像在

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

但是静脉注射通常是以清晰的方式传播的


所以,把它粘在一起,或者把它做成一个单独的柱子。。。无论什么内容更适合您的程序和结构。

回答:IV对于解密是必需的,只要内容已经用它加密。您不需要加密或隐藏IV。它可能是公共的

--

IV的目的是与您正在使用的密钥相结合,因此就像您使用不同的“最终密钥”加密每个“数据块”,然后它保证加密数据(加密数据)在加密(和解密)过程中始终是不同的

这是一个很好的例子,说明了如果你不使用IV,会发生什么

基本上,加密过程是通过在块中加密输入数据来完成的。因此,在本例的加密过程中,图像中具有相同颜色的所有部分(比如白色背景)都将输出相同的“密码数据”,如果您始终使用相同的密钥,那么仍然可以找到一个模式,然后您没有按需隐藏图像


因此,将不同的额外数据(IV)组合到每个块的键中,就像为每个块使用不同的“最终键”,然后解决问题。

将IV作为密文的前缀是标准的。AES是对称的,而不是不对称的。“非常好的说明”很好,但不是关于IV。它是关于块模式“ECB”。是的,很多更高级的模式使用IV。我同意。。。IV远不止这些。。。但这是一个非常公平的用法示例。。。特别是对于那些不了解每一个区块的.IV的人来说,这听起来不像是加密的正确用法。链接到块模式描述可能很有用。要点是正确的“你不需要加密或隐藏IV,它可能是公开的。”。