[英]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'”
這發生在大文件中。
我已經閱讀了許多類似的頁面,但無法修復它以進行此類解密。
有什么幫助嗎?
問候
這么多安全錯誤:
除非要加密的數據始終是塊大小的精確倍數,否則必須將填充模式用於 ECB(和 CBC)模式。 這是因為 AES 是基於塊的。
內存不足是因為整個文件一次都很棒: File.ReadAllBytes
,在流代碼中讀取較小的塊..
使用與支持的密鑰大小(128、192 或 256 位)完全一致的密鑰。 填充鍵沒有標准,短鍵不安全。
假設ASCII
幾乎總是一個糟糕的選擇,通常正確的選擇是UTF-8
。
ECB 模式不使用 IV。 在 CBC 模式下,IV 應該是塊大小和隨機字節。
不要在新作中使用ECB模式,它不安全,請參閱ECB模式,向下滾動到企鵝。 而是使用帶有隨機 IV 的 CBC 模式,只需在加密數據前加上用於解密的 IV,它不需要保密。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.