Ich versuche 500 MB Daten zu entschlüsseln, und ich bekomme eine Ausnahmebedingung für größere Dateien, so dass die Entschlüsselung für kleinere Dateien funktioniert, gibt es trotzdem, kann ich sicherstellen, dass ich ' bekomme ich diese Ausnahme nicht aus dem Speicher?Entschlüsselung großer Datei mit AES
Der erste Teil der key.file ist der IV und der zweite Teil der key.file ist der Schlüssel.
Meine Maschine hat 32 GB Speicher, es ist also kein lokales Problem.
Der Code bricht in dieser Zeile: var so = decrTransform.TransformFinalBlock (file, 0, file.Length);
private void DecryptData() {
X509Certificate2 cert;
var storeLocation = (StoreLocation)Enum.Parse(typeof(StoreLocation), "LocalMachine", true);
var storeName = (StoreName)Enum.Parse(typeof(StoreName), "My", true);
var findType = (X509FindType)Enum.Parse(typeof(X509FindType), "FindByThumbprint", true);
string thumbprint = Thumb;
try
{
X509Store certStore = new X509Store(storeName, storeLocation);
certStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certCollection = certStore.Certificates.Find(findType,
thumbprint, false);
certStore.Close();
cert = new X509Certificate2(certCollection[0]);
}
catch (Exception ex)
{
throw ex;
}
RijndaelManaged alg = new RijndaelManaged();
try
{
var asd = ((RSACryptoServiceProvider)cert.PrivateKey).Decrypt("file.key.path"), true);
var iv = new byte[16];
Buffer.BlockCopy(asd, 0, iv, 0, 16);
var key = new byte[32];
Buffer.BlockCopy(asd, 16, key, 0, 32);
alg.Padding = PaddingMode.PKCS7;
alg.Mode = CipherMode.CBC;
using (ICryptoTransform decrTransform = alg.CreateDecryptor(key, iv))
{
byte[] file = ReadFile(@"encrypted.file.path");
var so = decrTransform.TransformFinalBlock(file, 0, file.Length);
File.WriteAllBytes(@"SavedData.path", so);
decrTransform.Dispose();
}
}
catch (Exception ex)
{
throw ex;
}
}
32-Bit-Betriebssystem oder 64-Bit-Betriebssystem? Kompilieren für 32bit .NET oder 64bit .NET? – davidbak
Wurde die gesamte 512mb in einem Prozess verschlüsselt? –
Die Sache ist, ein 32-Bit-.NET-Prozess kann nur auf 2 GB zugreifen (Benutzerbereich) und kann Schwierigkeiten bei der Zuweisung großer zusammenhängender Speicherblöcke haben. Sie haben bereits einen 500 MB großen Block zusammenhängender Speicher für die Datei gefunden, die Sie eingelesen haben. Möglicherweise haben Sie keinen zweiten 500 MB großen Block zusammenhängender Speicher in Ihrem Prozessadressraum für die dekodierten Daten. Wenn Sie 32-Bit ausführen. – davidbak