【问题标题】:AES-128-ECB decryption: The input data is not a complete blockAES-128-ECB解密:输入数据不是一个完整的块
【发布时间】: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


【解决方案1】:

您应该将 base 64(这似乎是输入密文的格式)直接转换为 Byte[]。您当前正在将其转换为位,然后转换为字符,然后转换为字节。 Base 64 已定义为将字节(或八位字节)编码为文本。

将带有随机值的字节转换为文本将给您带来麻烦;这是base 64首先存在的原因之一。尝试为您的平台找到正确的 base 64 实现,即使在标准 API 中也应该有很多。

【讨论】:

  • 设法摆脱了错误,但仍然得到不正确的结果,必须寻求更多
  • 快乐狩猎 :) 如果这消除了问题中的错误,请不要忘记投票/接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
相关资源
最近更新 更多