C# AES加密解密 解密时弹出“要解密的数据的长度无效。”的问题

夜丿十三 2017-07-26 04:41:55
最近研究C#的AES加密解密,目前加密没有问题,但是解密时总是弹出“要解密的数据的长度无效。”的问题。请大神们看看原因在哪。谢谢。

private void button1_Click(object sender, EventArgs e) //加密
{
string clearText = textBox1.Text.Trim(); //待加密的字符串
byte[] clearBytes = Encoding.ASCII.GetBytes(clearText);
using (var encryptor = RijndaelManaged.Create())
{
encryptor.KeySize = 128;
encryptor.Padding = PaddingMode.Zeros;
encryptor.Mode = CipherMode.CFB;
encryptor.Key = Encoding.ASCII.GetBytes("01234567891234560123456789123456");
encryptor.IV = Encoding.ASCII.GetBytes("0123456789123456");
using (MemoryStream Memory = new MemoryStream())
{
using (CryptoStream Encryptor = new CryptoStream(Memory, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
{
Encryptor.Write(clearBytes, 0, clearBytes.Length);
//Encryptor.Close();
Encryptor.FlushFinalBlock();
}
Array.Copy(Memory.ToArray(), clearBytes, clearBytes.Length);
clearText = Convert.ToBase64String(clearBytes);
}

}
textBox2.Text = clearText;
}

private void button2_Click(object sender, System.EventArgs e) //解密
{
string clearText = textBox2.Text.Trim(); //待解密的字符串
byte[] clearBytes = Encoding.ASCII.GetBytes(clearText);
using (var decryptor = RijndaelManaged.Create())
{
decryptor.KeySize = 128;
decryptor.Padding = PaddingMode.Zeros;
decryptor.Mode = CipherMode.CFB;
decryptor.Key = Encoding.ASCII.GetBytes("01234567891234560123456789123456");
decryptor.IV = Encoding.ASCII.GetBytes("0123456789123456");

using (MemoryStream Memory = new MemoryStream(clearBytes)) // 开辟一块内存流,存储密文
{
using (CryptoStream Decryptor = new CryptoStream(Memory, decryptor.CreateDecryptor(), CryptoStreamMode.Read)) // 把内存流对象包装成加密流对象
{
using (MemoryStream originalMemory = new MemoryStream()) // 明文存储区
{
Byte[] Buffer = new Byte[1024];
Int32 readBytes = 0;
while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
{
originalMemory.Write(Buffer, 0, readBytes);
}
}

}
Array.Copy(Memory.ToArray(), clearBytes, clearBytes.Length);
clearText = Convert.ToBase64String(clearBytes);
}

textBox4.Text = clearText;
}
}

跳出问题的语句已经标红。
...全文
1189 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
GangelMoo 2018-09-22
  • 打赏
  • 举报
回复
我也遇到这个问题
分段加密就有这个问题
加密后Byte[]长度改变了。按照原来长度读取密文段不完整。就解密不了
  • 打赏
  • 举报
回复
你应该发到c#论坛:http://bbs.csdn.net/forums/CSharp
夜丿十三 2017-07-28
  • 打赏
  • 举报
回复
有没有大神给看看

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧