【发布时间】:2014-05-03 16:45:12
【问题描述】:
我已经在互联网和 Stack Overflow 上进行了搜索,但我找不到以下问题的解决方案:
我想在 CFB 模式下使用 AES 算法加密和解密数据。据我所知,CFB 模式不需要填充,加密数据的大小与未加密数据的大小相同。但是,当我将 Padding 设置为 None 并将标准反馈大小保持在 128 位时,我收到一个异常,指出要写入/加密的数据长度无效。
当我将反馈大小更改为 8 位时,一切正常。但这是一个极其低效且因此缓慢的加密过程。据我了解,CFB 可以使用标准反馈大小并处理比块的全长短的数据。
初始化代码:
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,但也没有真正的解决方案,除了手动缩短加密数据(这不是一个很好的解决方案,而只是一种解决方法)。
【问题讨论】:
-
CFB模式每次加密
FeedbackSize位,如果设置为128,肯定需要padding。但是即使使用FeedbackSize = 8也无法让它工作,你能告诉我你是怎么做到的吗?
标签: c# encryption aes