我需要 C# 中的 AES 加密/解密方面的帮助。具体来说,我想用 RijndaelManaged 生成一个 IV,将其转换为文本,并将 IV 与加密文本一起存储在数据库中。我想将 IV 附加到加密数据的开头,以便可以将其删除并将其用于解密功能。
这就是我的困惑所在...... RijndaelManaged 生成的 IV 是一个字节数组,长度为 16 个字节。所以我认为IV在转换为文本时应该是16个字符,但事实并非如此。
IV 的长度为 16 个字节,但是当我将这 16 个字节转换为文本时,它是 24 个字符长。这是正常的吗?每次都会这样吗?如果是这样,那么我将只取加密文本的前 24 个字符作为解密的 IV,而不是前 16 个字符(但这会产生另一个错误,如下所述)。我真的很想了解发生了什么。
这里有一些代码。
RijndaelManaged RM= new RijndaelManaged();
byte[] InitialVectorBytes = RM.IV;
// For testing
string stringIV = Convert.ToBase64String(InitialVectorBytes);
int IVLength = InitialVectorBytes.Length;
string test = "IV is " + stringIV + ". Length is " + IVLength;
MessageBox.Show(test);
// MessageBox displays - "IV is m4L5Xs2FsPoIMSH7qraghQ==. Length is 16"
所以 IV 的长度是 24 个字符(并且由于某种原因总是以 == 结尾),但 IV 的长度是 16。我只测试了几次,但这似乎是模式。
当我从加密文本中获取前 24 个字符作为 IV 然后用它解密时,会出现问题......
//Using the first 24 characters of encrypted text as the IV
string InitialVector = CipherText.Remove(24);
byte[] InitialVectorBytes = Encoding.ASCII.GetBytes(InitialVector);
ICryptoTransform Decryptor = RM.CreateDecryptor(KeyBytes, InitialVectorBytes)
我收到另一个错误...“指定的初始化向量 (IV) 与此算法的块大小不匹配。”
提前致谢。任何帮助,将不胜感激。