【发布时间】:2021-08-02 01:39:51
【问题描述】:
我正在尝试使用 AES 加密来加密一个大文件 (Camtasia.exe)。 现在由于某种原因,我得到了“内存不足”异常。我对此真的很陌生,我不知道如何解决这个问题。这是我的代码
我用它来调用我的加密方法。
bytes = File.ReadAllBytes("Camtasia.exe");
Cryptography.Encryption.EncryptAES(System.Text.Encoding.Default.GetString(bytes), encryptionKey);
这是 AES 加密本身
public static string EncryptAES(string content, string password)
{
byte[] bytes = Encoding.UTF8.GetBytes(content);
using (SymmetricAlgorithm crypt = Aes.Create())
using (HashAlgorithm hash = MD5.Create())
using (MemoryStream memoryStream = new MemoryStream())
{
crypt.Key = hash.ComputeHash(Encoding.UTF8.GetBytes(password));
// This is really only needed before you call CreateEncryptor the second time,
// since it starts out random. But it's here just to show it exists.
crypt.GenerateIV();
using (CryptoStream cryptoStream = new CryptoStream(
memoryStream, crypt.CreateEncryptor(), CryptoStreamMode.Write))
{
cryptoStream.Write(bytes, 0, bytes.Length);
}
string base64IV = Convert.ToBase64String(crypt.IV);
string base64Ciphertext = Convert.ToBase64String(memoryStream.ToArray());
return base64IV + "!" + base64Ciphertext;
}
}
这是我在顶部调用函数“EncryptAES”时再次遇到的错误。如果有人能解释这是如何发生的以及如何解决它,我会很高兴 https://imgur.com/xqcLsKW
【问题讨论】:
-
它到底在哪里轰炸?是在尝试读取所有字节时吗?
-
如果它没有在那里失败,它可能会在尝试将其转换为字符串时失败,然后返回到第二个(不同的)字节数组(全部在内存中)
-
调用“Cryptography.Encryption.EncryptAES(System.Text.Encoding.Default.GetString(bytes), encryptionKey)”失败
-
Camtasia.exe 不是文本编码文件,将其通过文本编码/解码过滤器会导致内容损坏。
标签: c# file encryption memory