我需要一些C#中AES加密/解密的帮助。具体来说,我想用RijndaelManaged生成IV,将其转换为文本,并将加密文本存储在数据库中。我想将IV添加到加密数据的开头,以便我可以将其删除并用于解密功能。如何将RijndaelManaged生成的IV附加到C#中用于AES解密的数据中#
这里是我的困惑所在...... 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 )与该算法的块大小不匹配。“
在此先感谢。任何帮助,将不胜感激。