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

最佳答案

检查私钥和公钥是否匹配的最简单方法是使用公钥加密一段数据,并查看是否可以使用私钥对其解密-或使用私钥对一段数据进行签名,然后看看是否可以使用公共(public) key 进行验证。
如果 key 是RSA key ,则可以将公钥转换为Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters,将私钥转换为Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters,并验证Modulus相同,并且公钥的Exponent与私钥的PublicExponent相等。如果您真的想花哨的话,还可以验证私钥的所有其余参数(遵循PKCS#1 3.2节)。

关于c# - 如何使用(.NET/BouncyCaSTLe)检查私钥/公钥对是否匹配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8908206/

10-13 07:39