我正在查看C# AES非对称加密和解密示例这里,并且不确定是否应该将IV存储在一个安全的地方(也是加密的??)。或者我可以把它附加到加密的文本上,以便以后在我要解密的时候使用。从一个关于AES的简短阅读来看,它似乎根本不需要解密,但我不确定我是否正确,而且aes.CreateDecryptor(keyBytes, iv)也需要它作为参数。
我对所有加密都使用了一个密钥。
发布于 2017-06-22 16:02:18
将加密的数据作为IV.Concat(cipherText)传输是相当标准的。将IV放到一边也是相当标准的,就像在PKCS#5中一样。
IV端方法与.NET想要处理数据的方式更加匹配,因为将IV分割成单独传递给IV参数(或属性),然后使用密文(或恢复的明文)进行更复杂的切片操作有点烦人。
但静脉注射通常都是以明确的方式传播的。
所以,把它粘合在一起,或者让它成为一个单独的专栏.任何适合你的程序和结构的东西。
发布于 2017-06-22 16:27:55
答案:只要内容已被加密,解密就必须使用 IV。你不需要加密或隐藏IV,它可能是公开的。
--
IV的目的是将其与您正在使用的密钥组合在一起,因此就像您正在用不同的“最终密钥”加密每个“数据块”,然后它保证加密数据(加密的数据)在加密(和解密)过程中始终是不同的。
这是一个非常好的例子,说明如果不使用IV,会发生什么。

基本上,加密过程是通过分组加密输入数据来完成的。因此,在本例的加密过程中,所有具有相同颜色(例如白色背景)的图像部分都将输出相同的“密码数据”--如果您始终使用相同的密钥,那么仍然可以找到一个模式,然后您没有按需要隐藏图像。
因此,将(一个不同的额外数据( IV) )与的键(每个块)组合起来,就好像您对每个块使用了不同的“最终键”,然后解决了您的问题。
https://stackoverflow.com/questions/44694994
复制相似问题