के लिए मैं आरएसए एन्क्रिप्शन/डिक्रिप्शन और प्रमाणपत्र के साथ खेल रहा हूं। यहाँ विशेष रूप से, मैं एक प्रमाण पत्र की सार्वजनिक कुंजी के साथ एन्क्रिप्ट करने के लिए प्रयास करें, और तब, जब निजी कुंजी है कि प्रमाण पत्र के लिए इसी के साथ डिक्रिप्ट करने के लिए कोशिश कर रहा है, कोई त्रुटि मिलती है:"सिस्टम। सुरक्षा। क्रिप्टोग्राफी। क्रिप्टोग्राफिक अपवाद: खराब कुंजी।" RSACryptoServiceProvider.Decrypt()
System.Security.Cryptography.CryptographicException: Bad Key.
at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
at System.Security.Cryptography.RSACryptoServiceProvider.DecryptKey(SafeKeyHandle pKeyContext, Byte[] pbEncryptedKey, Int3
2 cbEncryptedKey, Boolean fOAEP, ObjectHandleOnStack ohRetDecryptedKey)
at System.Security.Cryptography.RSACryptoServiceProvider.Decrypt(Byte[] rgb, Boolean fOAEP)
कोड है:
private void TestCertificates2()
{
//////////////////////////////////////////////////////
// SENDER CODE
//////////////////////////////////////////////////////
// get certificate
var certSender = new X509Certificate2(@"C:\Test.cer");
// encrypt with public key
var providerSender = (RSACryptoServiceProvider)certSender.PublicKey.Key;
var plainSender = Encoding.Default.GetBytes("this is plain text");
var cipher = providerSender.Encrypt(plainSender, false);
//////////////////////////////////////////////////////
// RECEIVER CODE
//////////////////////////////////////////////////////
// get certificate
var store = new X509Store("MY", StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
var certReceiver = store.Certificates.Find(X509FindType.FindBySubjectName, "Test Subject", false)[0];
// decrypt with private key
var providerReceiver = (RSACryptoServiceProvider)certReceiver.PrivateKey;
var plainReceiver = providerReceiver.Decrypt(cipher, false);
// check they are same
if (plainSender.Equals(plainReceiver))
{
Console.WriteLine("Same!");
}
}
संदर्भ के लिए, प्रमाण पत्र बनाया है और स्थापित
makecert.exe Test.cer -n "CN=Test Subject" -sr LocalMachine -ss My
के माध्यम से किसी स्थान सकता है मैं गलत क्या कर रहा हूँ था? अग्रिम में धन्यवाद!
साइड नोट: आपको वास्तव में fOAEP = true का उपयोग करना चाहिए। – CodesInChaos