我已经在互联网和Stack Overflow上搜索过,但我无法找到以下问题的解决方案:
我希望在CFB模式下使用AES算法加密和解密数据。据我所知,CFB模式不需要填充,加密数据与未加密数据的大小相同。但是,当我将Padding设置为None并将标准反馈大小保持为128位时,我得到一个例外,表示要写入/加密的数据长度无效。
当我将反馈大小更改为8位时,一切正常。但这是一个极端无效,因此加密过程缓慢。据我所知,CFB可以使用标准反馈大小并处理比块的全长短的数据。
INIT-代码:
RijndaelManaged aes_algorithm = new RijndaelManaged();
ICryptoTransform crypto_transform;
CryptoStream crypto_stream;
aes_algorithm.Mode = CipherMode.CFB;
aes_algorithm.Padding = PaddingMode.None;
aes_algorithm.FeedbackSize = 128;
aes_algorithm.KeySize = aes_key.Length * 8;
aes_algorithm.BlockSize = aes_iv.Length * 8;
crypto_transform = aes_algorithm.CreateEncryptor(aes_key, aes_iv);
加密
MemoryStream Memory = new MemoryStream();
crypto_stream = new CryptoStream(Memory, crypto_transform, CryptoStreamMode.Write);
crypto_stream.Write(Input, 0, Input.Length);
crypto_stream.FlushFinalBlock();
crypto_stream.Dispose();
crypto_transform.Dispose();
byte[] Output = Memory.ToArray();
Memory.Dispose();
那么我做错了什么或是.NET中的错误?我刚刚找到了这个主题C# AES-128 CFB Error,但除了手动缩短加密数据(这不是一个好的解决方案,只是一种解决方法)之外,也没有真正的解决方案。