2010-01-10 9 views
13

Ich versuche, Dateien mit asymmetrischer Verschlüsselung zu verschlüsseln und dann zu entschlüsseln. Ich habe mit makecert ein Testzertifikat erstellt und es in meinen persönlichen localmachine Store installiert. In Zukunft muss ich dieses Zertifikat auf mehreren Servern installieren, deshalb habe ich es mit "-pe" -Flag erstellt, das heißt, mit exportierbaren privaten Schlüssel. Die Zertifikate wurden erfolgreich erstellt und installiert. Ich sehe den Hinweis "Sie haben einen privaten Schlüssel, der diesem Zertifikat entspricht" in mmc."Ungültiger Schlüssel" Ausnahme für Zertifikate mit exportierbaren privaten Schlüssel

Jetzt versuche ich Daten mit RSACryptoServiceProvider in .NET 3.5 zu verschlüsseln. Und es gelingt. Aber wenn ich versuche, es zu entschlüsseln, bekomme ich eine "Bad Key" -Ausnahme.

Wenn ich das Zertifikat ohne "-pe" -Option erstellen, funktioniert der gleiche Code gut für die Entschlüsselung. Hier ist der Code:

RSA rsaKey = (RSA)myCertificate.PrivateKey; 
RSACryptoServiceProvider rsaCsp = (RSACryptoServiceProvider)rsaKey; 
byte[] plainText = rsaCsp.Decrypt(encryptedText, true); 

Auch habe ich eine andere Methode versucht, System.Security.Cryptography.Pkcs Namespace:

EnvelopedCms envelope = new EnvelopedCms(); 
envelope.Decode(encryptedText); 
envelope.Decrypt(); 
byte[] plainText = envelope.ContentInfo.Content; 

Das Ergebnis war das gleiche ... Kann mir jemand helfen ?

Antwort

21

Stellen Sie sicher, dass der Schlüssel, den Sie verwenden, mit "-sky Exchange" erstellt wurde, wenn Sie makecert.exe verwenden. Ohne dies können Sie nur den Schlüssel zum Signieren und Authentifizieren verwenden, nicht die Verschlüsselung/Entschlüsselung. Dies ist der Anwendungsfall, den Sie hier implementieren.

+0

Danke Herr, genau das, was mir gefehlt hat – KodeKreachor

+1

Das hat den Tag gerettet .. danke für die Antwort UND die Erklärung. – granadaCoder