Ошибка дешифрования 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 ответ

Так много ошибок безопасности:

  1. Если данные, которые должны быть зашифрованы, не всегда являются точным кратным размеру блока, режим заполнения должен использоваться для режимов ECB (и CBC). Это потому, что AES основан на блоках.

  2. Недостаток памяти вызван тем, что весь файл был великолепен одновременно: File.ReadAllBytes, читайте меньшие куски в потоковом коде..

  3. Используйте ключ точно одного поддерживаемого размера ключа, 128, 192 или 256 бит. Стандартных клавиш не существует, а короткие клавиши небезопасны.

  4. Если предположить, ASCII почти всегда плохой выбор, как правило, правильный выбор UTF-8,

  5. Режим ECB не использует IV. В режиме CBC IV должен быть размером блока и случайными байтами.

  6. Не используйте режим ECB в новой работе, это небезопасно, см. Режим ECB, прокрутите вниз до пингвина. Вместо этого используйте режим CBC со случайным IV, просто добавьте к зашифрованным данным префикс IV для использования в расшифровке, он не должен быть секретным.

Другие вопросы по тегам