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

时间:2012-01-18 09:58:02

标签: c# .net 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
}

2 个答案:

答案 0 :(得分:6)

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

如果密钥是RSA密钥,您可以将公钥转换为Org.BouncyCastle.Crypto.Parameters.RSAKeyParameters,将私钥转换为Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters,并验证Modulus是否相同以及Exponent私钥的等于私钥的PublicExponent。如果你想真正想要,你也可以验证私钥的所有剩余参数(按照PKCS#1第3.2节)。

答案 1 :(得分:0)

  

我正在尝试加密某些文本(私钥)并解密一些文本   (公钥)。

公钥不用于解密。在PKI中,公共密钥被多方共享以加密它打算发送给私钥持有者的数据,然后私钥用于解密提交的数据。