繁体   English   中英

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

[英]How to check if private/public key pair match using (.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并验证Modulus是相同的,即Exponent的公钥等于PublicExponent 如果您想变得更花哨,您还可以验证私钥的所有剩余参数(遵循PKCS#1第 3.2 节)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM