簡體   English   中英

AES-128-ECB 解密錯誤

[英]AES-128-ECB Decrypt Error

這是代碼 -

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模式,向下滾動到企鵝。 而是使用帶有隨機 IV 的 CBC 模式,只需在加密數據前加上用於解密的 IV,它不需要保密。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM