Forums Neueste Beiträge
 

RSACryptoServiceProvider Exception in DLL beim aufräumen durch GC

12/10/2007 - 11:23 von Thomas Östreich | Report spam
Hallo NG,

habe eine Problem mit dem RSACryptoServiceProvider. Sobald der GC Objekt
aus dem Speicher entfernt wird so nach 10 min Inaktivitàt stürtzt die
Anwendung bzw irgend eine andere Security Anwendung (HP) ab.

Problem ist Stack Corruption von "OLEAUT32" (ACCESS_VIOLATION_OLEAUT32)
beim entladen.
Konnte das Problem jetzt soweit ermitteln das der Fehler von
RSACryptoServiceProvider kommt. Im SystemLog ".NET Runtime 2.0 Error"

Der RSACryptoServiceProvider làuft in einen Background Thread und sobald
der Thread komplett bereinigt wird stürtzt die Anwendung mit Speicher
Fehler ab :(.

Der Code überprüft nur die Gültigkeit einer Signatur.

private bool IsValid()
{
// Besitzt erweiterte Headerinformationen
byte[] publicKeyAssembly =
Assembly.GetExecutingAssembly().GetName().GetPublicKey();
int size = publicKeyAssembly.Length - 12;
// Key für CspProvieder
byte[] publicKey = new byte[size];
Buffer.BlockCopy(publicKeyAssembly, 12, publicKey, 0, size);

using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
using (SHA1Managed sh1 = new SHA1Managed())
{
rsa.ImportCspBlob(publicKey);
byte[] btHash = sh1.ComputeHash(MachineName);
bool ret = rsa.VerifyHash(btHash,
CryptoConfig.MapNameToOID("SHA1"), _signHash);
sh1.Clear();
rsa.Clear();
return ret;
}
}
}

Ist das ein bekanntes Problem bei MS oder ist das nur weil es im Thread
làuft und der wenn er fertig ist auch bereinigt wird durch GC?

Mfg Thomas
 

Lesen sie die antworten

#1 Thomas Östreich
15/10/2007 - 10:47 | Warnen spam
habe eine Problem mit dem RSACryptoServiceProvider. Sobald der GC Objekt
aus dem Speicher entfernt wird so nach 10 min Inaktivitàt stürtzt die
Anwendung bzw irgend eine andere Security Anwendung (HP) ab.

Problem ist Stack Corruption von "OLEAUT32" (ACCESS_VIOLATION_OLEAUT32)
beim entladen.
Konnte das Problem jetzt soweit ermitteln das der Fehler von
RSACryptoServiceProvider kommt. Im SystemLog ".NET Runtime 2.0 Error"



Gehe davon aus das es an der HP-Software liegt, da sie sich in den
Kontext reinhàngt und sich nicht bei Zerstörung der Instanze bereinigt
wahrscheinlich auf die Anwendung ein Hook hat (Erweitert Fenster welche
Sicherheit benötigen um weiters System Icon auf der rechten Seite). Denn
wenn ich die Funktion im MainThread ausführe, wo sie erst bei schließen
der Anwendung vom GC entfernt wird làuft alles ohne Probleme.
[HP ProtectTools Security Manager]

Der RSACryptoServiceProvider làuft in einen Background Thread und sobald
der Thread komplett bereinigt wird stürtzt die Anwendung mit Speicher
Fehler ab :(.

Der Code überprüft nur die Gültigkeit einer Signatur.

private bool IsValid()
{
// Besitzt erweiterte Headerinformationen
byte[] publicKeyAssembly =
Assembly.GetExecutingAssembly().GetName().GetPublicKey();
int size = publicKeyAssembly.Length - 12;
// Key für CspProvieder
byte[] publicKey = new byte[size];
Buffer.BlockCopy(publicKeyAssembly, 12, publicKey, 0, size);

using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
using (SHA1Managed sh1 = new SHA1Managed())
{
rsa.ImportCspBlob(publicKey);
byte[] btHash = sh1.ComputeHash(MachineName);



Diese Zeile verursacht nach ca. 10 min mach Bendigung des Threads denn
Anwendungsabsturz:
bool ret = rsa.VerifyHash(btHash,
CryptoConfig.MapNameToOID("SHA1"), _signHash);

sh1.Clear();
rsa.Clear();
return ret;
}
}
}

Ähnliche fragen