我正在研究一个C#AES非对称加密和解密示例here,并且不确定我是否应该将IV存储在安全的地方(也加密??)。或者我可以将它附加到加密文本以便以后使用时进行解密。从关于AES的简短阅读来看,它似乎根本不需要解密,但我不确定我是否正确并且aes.CreateDecryptor(keyBytes, iv)
需要它作为参数。
我使用单个密钥进行所有加密。
答案 0 :(得分:2)
将加密数据作为IV.Concat(cipherText)
传输是相当标准的。将IV放在一边也是相当标准的,例如PKCS#5。
IV-on-side方法与.NET想要处理数据的方式更紧密地匹配,因为切断IV以将其单独传递给IV参数(或属性),然后到使用密文(或恢复的明文)进行更复杂的切片操作。
但IV通常以明确的方式传播。
所以,将它粘合在一起,或者将它组成一个单独的列......无论你的程序和结构如何更好。
答案 1 :(得分:0)
答案:只要内容已使用加密,IV就是解密所必需的。您不需要加密或隐藏IV。它可能是公开的。
-
IV的目的是组合到您正在使用的密钥,因此就像您使用不同的“最终密钥”加密每个“数据块”,然后它保证密码数据(加密)一)在加密(和解密)过程中总是不同的。
这是一个非常好的例子,说明发生了什么如果你不使用IV。
基本上,加密过程是通过加密块中的输入数据来完成的。所以在这个例子的加密过程中,如果你总是使用相同的键,那么具有相同颜色的图像的所有部分(比如白色背景)将输出相同的“密码数据”,然后仍然可以找到一个模式,然后你没有按照需要隐藏图像。
因此,将一个不同的额外数据(IV)与每个块的键组合,就好像你为每个块使用不同的“最终键”,然后你解决你的问题。