填充问题.CFB模式下RijndaelManaged无

本文关键字:RijndaelManaged 模式 问题 CFB 填充 | 更新日期: 2023-09-27 17:53:25

我已经在互联网和Stack Overflow上搜索过了,但我找不到以下问题的解决方案:

我想在CFB模式下使用AES算法加密和解密数据。据我所知,CFB模式不需要填充,加密数据与未加密数据具有相同的大小。然而,当我将Padding设置为None并保持标准反馈大小为128位时,我得到一个异常,说要写/加密的数据长度无效。

当我将反馈大小更改为8位时,一切工作正常。但这是一个效率极低的加密过程,因此速度很慢。据我所知,CFB可以使用标准的反馈大小并处理比块的完整长度短的数据。

Init-Code:

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中的一个bug ?我刚刚发现这个主题c# AES-128 CFB错误,但也没有真正的解决方案,除了手动缩短加密数据(这不是一个很好的解决方案,但仅仅是一个变通方法)。

填充问题.CFB模式下RijndaelManaged无

CFB模式通常实现为CFB-8,即每次加密8位。

参见Wikipedia: Cipher feedback