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

夜丿十三 2017-08-01 01:34:23
最近研究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;
}
}

跳出问题的语句已经标红。
...全文
625 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
夜丿十三 2017-08-01
  • 打赏
  • 举报
回复
经过反复推敲试验,攻克了!
夜丿十三 2017-08-01
  • 打赏
  • 举报
回复
引用 4 楼 JNECY 的回复:
感觉有点乱,不过整体挺好的
发现问题所在了吗
JNECY 2017-08-01
  • 打赏
  • 举报
回复
感觉有点乱,不过整体挺好的
夜丿十三 2017-08-01
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
另外解密部分的
 clearText = Convert.ToBase64String(clearBytes);//应该是Encoding.ASCII.GetString(clearBytes)


谢谢,已经按您的纠正做出修改,可是运行时还是会报同样的异常。
  • 打赏
  • 举报
回复
另外解密部分的
 clearText = Convert.ToBase64String(clearBytes);//应该是Encoding.ASCII.GetString(clearBytes)
  • 打赏
  • 举报
回复
clearText = Convert.ToBase64String(clearBytes);//加密是这种转化
byte[] clearBytes = Encoding.ASCII.GetBytes(clearText);//你解密也应该是这种Convert.FromBase64String

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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