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

本文关键字:公钥 是否 私钥 何使用 NET BuncyCastle 检查 | 更新日期: 2023-09-27 18:20:43

我有用于私钥和公钥的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
}

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

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

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

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

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