RSA şifreleme/şifre çözme ve sertifikalarla oynuyorum. İşte özellikle, bir sertifikanın ortak anahtar ile şifrelemek deneyin ve bu sertifikaya karşılık gelen özel anahtarı ile deşifre çalışırken, daha sonra, bir hata alıyorum:"System.Security.Cryptography.CryptographicException: Kötü Anahtar." 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)
Kod geçerli:
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!");
}
}
Başvuru için
, sertifika birisi yanlış ne yapıyorum nokta Can
makecert.exe Test.cer -n "CN=Test Subject" -sr LocalMachine -ss My
yoluyla oluşturulan ve kuruldu? Şimdiden teşekkürler!
Yan not: Gerçekten fOAEP = true kullanmalısınız. – CodesInChaos