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