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

Evg*_*rov 5 .net c# cryptography 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
}
Run Code Online (Sandbox Code Playgroud)

Ras*_*ber 6

检查私钥和公钥是否匹配的最简单方法是使用公钥加密一段数据,看看是否可以使用私钥对其进行解密 - 或者使用私钥对一段数据进行签名,看看你是否可以用公钥验证它.

如果密钥是RSA密钥,则可以将公钥转换Org.BouncyCastle.Crypto.Parameters.RSAKeyParameters为私钥,Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters并验证公钥是否Modulus相同以及Exponent公钥的私钥是否等于PublicExponent私钥.如果你想变得非常花哨,你也可以验证私钥的所有剩余参数(遵循PKCS#1第3.2节).