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

时间:2017-06-22 09:07:42

标签: encryption cryptography aes private-key

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

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

2 个答案:

答案 0 :(得分:2)

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

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

但IV通常以明确的方式传播。

所以,将它粘合在一起,或者将它组成一个单独的列......无论你的程序和结构如何更好。

答案 1 :(得分:0)

答案:只要内容已使用加密,IV就是解密所必需的。您不需要加密或隐藏IV。它可能是公开的。

-

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

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

enter image description here

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

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