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