c# - C#解密AES时要解密的数据长度无效消息
问题描述
我有两个按钮使用 AES 算法,一个用于加密,另一个用于解密。当我应用加密时很好,但是当我应用解密时,我会遇到此消息错误。
我正在使用Convert.FromBase64String(s)
,但它仍然无法正常工作。
private void Encryption_Click(object sender, EventArgs e)
{SaveFileDialog save = new SaveFileDialog();
save.FileName = "DefaultOutputName.txt"
save.Filter = "Text File | *.txt";
if (save.ShowDialog() == DialogResult.OK)
{
StreamWriter writer = new StreamWriter(save.OpenFile());
cipherdata = textBox2.Text;
plainbytes = Encoding.ASCII.GetBytes(cipherdata);
plainkey= Encoding.ASCII.GetBytes("0123456789abcdef");
desobj.Key = plainkey;
desobj.Mode = CipherMode.CBC;
desobj.Padding = PaddingMode.PKCS7;
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, desobj.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(plainbytes, 0, plainbytes.Length);
cs.Close();
cipherbytes = ms.ToArray();
Convert.ToBase64String(cipherbytes);
MessageBox.Show(cipherbytes.Length.ToString());
ms.Close();
writer.WriteLine(Encoding.ASCII.GetString(cipherbytes));
writer.Dispose();
writer.Close();
}
}
private void decryption_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
string s = File.ReadAllText(ofd.FileName);
cipherbytes = Encoding.ASCII.GetBytes(s);
System.IO.MemoryStream ms1 = new System.IO.MemoryStream(cipherbytes);
CryptoStream cs1 = new CryptoStream(ms1, desobj.CreateDecryptor(), CryptoStreamMode.Read);
cs1.Read(cipherbytes, 0, cipherbytes.Length);
plainbytes2 = ms1.ToArray();
cs1.Close();
ms1.Close();
textBox2.Text = Encoding.ASCII.GetString(plainbytes2);
}
}
解决方案
推荐阅读
- android - Firebase 检索到的文档/集合为空且没有错误
- php - 从php中的响应中删除外部方括号
- angular - Angular 9 HttpClient:一次调用时忽略标头
- python - 是否可以在启用 2 因素身份验证的组织中克隆存储库?
- html - SVG没有填充移动视图上的整个视口
- sql - 如何在sql中创建三元关系
- r - R:从其他 pacakge 的 git 分支加载 git 分支
- r - 如何在 R 中使用 dplyr 标记行值(基于条件)以创建新功能
- php - 如何在PHP中的admin根目录上方创建网站文件夹
- python - 如何使用 pybind11 将 PyCapsule 从 C++ 发送到 python