我正在尝试使用 CBC 模式的 AES 算法加密我的数据。出于这个原因,我使用 .Net 库“Bouncy Castle”。我没有加密背景,所以我试图以一种简单的方式使用它。这是我的加密代码
public byte[] encrypt(byte[] key, byte[] iv,byte[] data)
{
IBlockCipher engine=new AesFastEngine();
KeyParameter keyParam = new KeyParameter(key);
CbcBlockCipher cipher = new CbcBlockCipher(engine);
ICipherParameters parameters = new ParametersWithIV(keyParam, iv);
byte[] output=new byte[16+data.Length];
cipher.Init(true, parameters);
cipher.ProcessBlock(data, 0, output, data.Length);
//process output
byte[] cipherArray = new byte[data.Length];
/*
int k=0;
for (int i = 0; i < output.Length; i++)
{
if (output[i]!= 0)
{
cipherArray[k++] = output[i];
}
}
*/
return cipherArray;
}
当我尝试输入不是 16 的倍数时,我得到一个异常。当我用左边的零填充数组到右边时,我可以得到一个结果。但结果对我来说也是一个问题。它给了我这样的结果:
[0][0][0][0[111][22][33][44][66][77][33][12][32][23][0][0][0][0][0]
左右两边都是零。
我认为这可能与我对ProcessBlock(data, 0, output, data.Length)
功能的使用有关。我使用它的假设是输出将是我的密文,但似乎输出应该比输入长度长。由于我没有有关此功能的文档,因此我可能以错误的方式使用它。任何帮助,将不胜感激