c# – 如何使用(.NET / BouncyCastle)检查私钥/公钥对是否匹配?

我有私有和公钥的AsymmetricKeyParameter对象.查看它们是否匹配的最简单方法是什么?

我试图加密一些文本(私钥)和解密一些文本(公钥).
到目前为止,我还没有做到这一点,但似乎是错误的做法.

更新:以下是示例代码:

X509Certificate2 c = new X509Certificate2(@"certificate.cer");
byte[] privateKeyData = System.IO.File.ReadAllBytes(@"private.key");
Org.BouncyCastle.X509.X509Certificate cert = DotNetUtilities.FromX509Certificate(c);


RsaPrivateCrtKeyParameters privateKey = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(privateKeyData);
RsaKeyParameters publicKey = (RsaKeyParameters)cert.GetPublicKey();

if (privateKey.Modulus.Equals(publicKey.Modulus) && publicKey.Exponent.Equals(privateKey.PublicExponent)) 
{
     //they match
}
最佳答案
检查私钥和公钥是否匹配的最简单方法是使用公钥加密一段数据,看看是否可以使用私钥对其进行解密 – 或者使用私钥对一段数据进行签名,看看你是否可以用公钥验证它.

如果密钥是RSA密钥,则可以将公钥转换为Org.BouncyCastle.Crypto.Parameters.RSAKeyParameters,并将私钥转换为Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters,并验证模数是否相同且指数为公钥等于私钥的PublicExponent.如果你想要真正的想象,你也可以验证私钥的所有剩余参数(遵循PKCS#1第3.2节).

转载注明原文:c# – 如何使用(.NET / BouncyCastle)检查私钥/公钥对是否匹配? - 代码日志