Padding.None在RijndaelManaged CFB模式中的问题

时间:2014-03-25 16:56:42

标签: c# encryption aes

我已经在互联网和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,但除了手动缩短加密数据(这不是一个好的解决方案,只是一种解决方法)之外,也没有真正的解决方案。

1 个答案:

答案 0 :(得分:0)

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

参见维基百科:Cipher feedback