Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 操纵初始化向量并不(实际上)阻止我解密AES密文_C#_Encryption_Aes_Initialization Vector - Fatal编程技术网

C# 操纵初始化向量并不(实际上)阻止我解密AES密文

C# 操纵初始化向量并不(实际上)阻止我解密AES密文,c#,encryption,aes,initialization-vector,C#,Encryption,Aes,Initialization Vector,我根据MSDN上的示例创建了以下类: 每当我这样使用它时,它似乎加密得很好: var key = Crypto.GenerateKey(); var vector = Crypto.GenerateVector(key); var cypherText = Crypto.EncryptBase64("abcdefghijklmnopqrstuvwxyz1234567890", key, vector); vector = Crypto.GenerateVector(key); var pla

我根据MSDN上的示例创建了以下类:

每当我这样使用它时,它似乎加密得很好:

var key = Crypto.GenerateKey();
var vector = Crypto.GenerateVector(key);

var cypherText = Crypto.EncryptBase64("abcdefghijklmnopqrstuvwxyz1234567890", key, vector);
vector = Crypto.GenerateVector(key);
var plainText = Crypto.Decrypt(cypherText, key, vector);
然后,
明文
包含以下内容:

�\金��(���P\u0003�b\u001dxqrstuvwxyz1234567890


因此,更改IV似乎没有任何作用(特别是在较长的文档上)。为什么我们甚至需要IV?

对称算法的默认操作模式是
CipherMode.CBC

按照这种方式,加密数据的IV更改只会影响第一个解密的数据块

引用链接文章:

使用不正确的IV进行解密会导致第一个纯文本块 已损坏,但后续的纯文本块将是正确的。这是 因为一个明文块可以从两个相邻的 密文。因此,解密可以并行化。注意 对密文进行一位更改会导致 对应的纯文本块,并反转相应的 以下纯文本块中的位,但其余块 保持完整

这就是为什么没有身份验证的加密(例如)不是一个好主意的原因之一

另一方面,在加密期间更改IV会导致完全不同的密文,因为第一个块中的更改会传播到所有后续块


描述者:我不是密码专家,所以请验证我的想法。

没有IV,相同的
明文
加上相同的
将产生相同的
密码
。使用不同的IV允许我们为相同的
明文
加上相同的
产生不同的
密码。IV并不意味着被隐藏来自攻击者。可能是的副本