【发布时间】:2014-05-28 12:59:30
【问题描述】:
我正在尝试编写一个代码来解密使用 AES-128-ECB 加密并以 Base64 表示的文本。密钥是已知的(这是一项用于教育目的的任务)并以 ASCII 显示(例如,YELLOW SUBMARINE)。
代码如下:
private void button6_Click(object sender, EventArgs e)
{
string CTChar = Funcs.BitsToChar(Funcs.B64ToBits(textBox1.Text));
Byte[] CTBytes = new Byte[CTChar.Length];
for (int iCounter = 0; iCounter < CTChar.Length; iCounter++)
{
CTBytes[iCounter] = Convert.ToByte(CTChar[iCounter]%256);
}
string KeyBits = Funcs.CharToBits(textBox2.Text);
Byte[] KeyBytes = new Byte[textBox2.TextLength];
string PlainText = null;
Aes Decryptor = Aes.Create();
Decryptor.BlockSize = 128;
for (int iCounter = 0; iCounter < textBox2.Text.Length; iCounter++)
{
KeyBytes[iCounter] = Convert.ToByte(textBox2.Text[iCounter]);
}
Decryptor.KeySize = textBox2.TextLength * 8;
Decryptor.Key = KeyBytes;
Decryptor.Mode = CipherMode.ECB;
ICryptoTransform Decr = Decryptor.CreateDecryptor();
using (MemoryStream msDecrypt = new MemoryStream(CTBytes))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, Decr, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
PlainText = srDecrypt.ReadToEnd();
}
}
}
textBox3.Text = PlainText;
}
运行它并尝试解密文本时,出现错误:输入数据不是完整块(未处理加密异常)。我做错了什么?
【问题讨论】:
-
要知道它到底哪里出了问题,我们可能需要
BitsToChar函数等,但我想你应该首先避免那些(本地实现?)。
标签: c# encryption stream cryptography aes