如何使用(.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
}
检查私钥和公钥是否匹配的最简单方法是用公钥加密一段数据,看看你是否可以用私钥解密它,或者用私钥对一段数据进行签名,看看你能否用公钥验证它。
如果密钥是RSA密钥,则可以将公钥强制转换为Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters
,将私钥强制转换为Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters
,并验证Modulus
是否相同,以及公钥的Exponent
是否等于私钥的PublicExponent
。如果你想得到真正的幻想,你也可以验证私钥的所有剩余参数(按照PKCS#1第3.2节)
我正在尝试加密某些文本(私钥)并解密某些文本(公钥)。
公钥不用于解密。在PKI中,公钥由多方共享,以加密其打算发送给私钥持有者的数据,然后私钥用于解密提交的数据。