AES-128-ECB解密错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AES-128-ECB解密错误相关的知识,希望对你有一定的参考价值。

这是代码 -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace AESFileDecrypt
{
    class Program
    {
        static void Main(string[] args)
        {
            RijndaelManaged aes = new RijndaelManaged();
            aes.Key = Encoding.ASCII.GetBytes("12345678");
            aes.IV = new byte[0x10];
            aes.Padding = PaddingMode.None;
            aes.Mode = CipherMode.ECB;
            ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
            byte[] data = File.ReadAllBytes(@"C:enc.aes");
            using (MemoryStream ms = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Write))
                {                
                    cs.Write(data, 0, data.Length);
                    cs.FlushFinalBlock();
                    File.WriteAllBytes(@"C:dec.txt", ms.ToArray());
                }
            }
        }
    }
}

我面临的两个错误 -

1 - “要解密的数据长度无效”

这种情况发生在FlushFinalBlock我想。

2 - “'System.OutOfMemoryException'”

大文件会发生这种情况。

我已阅读了许多类似的页面但无法修复此类解密。

有帮助吗?

问候

答案

这么多安全错误:

  1. 除非要加密的数据始终是块大小的精确倍数,否则必须将填充模式用于ECB(和CBC)模式。这是因为AES是基于块的。
  2. 导致内存不足是因为整个文件一次性很好:File.ReadAllBytes,在流代码中读取较小的块。
  3. 使用一个密钥,使用支持的密钥大小,128,192或256位。填充键没有标准,短键不安全。
  4. 假设ASCII几乎总是一个糟糕的选择,通常正确的选择是UTF-8
  5. ECB模式不使用IV。对于CBC模式,IV应该是块大小和随机字节。
  6. 不要在新工作中使用ECB模式,它不安全,请参阅ECB mode,向下滚动到企鹅。相反,使用带有随机IV的CBC模式,只需将加密数据加上IV用于解密,它就不需要保密。

以上是关于AES-128-ECB解密错误的主要内容,如果未能解决你的问题,请参考以下文章

AES128-ECB对文件进行加密解密验证

关于蓝牙通信的数据AES128 ECB加密解密

python Crypto AES-256-ECB 与PHP之间完成加解密

java使用AES加密解密 AES-128-ECB加密

统一认证加密及签名参数校验

iOS逆向之对称算法(下)