How to check if private / public key pair (.NET / BouncyCastle) matches?

I have an AsymmetricKeyParameter object for a private and public key. What is the easiest way to see if they match?

I am trying to encrypt some text (private key) and decrypt some text (public key). So far I have not been able to do this, but this seems like the wrong approach.

Update: Here is a sample code:

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
}
+5
source share
3 answers

, , - , - , , , .

RSA, Org.BouncyCastle.Crypto.Parameters.RSAKeyParameters Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters , Modulus Exponent PublicExponent . , ( PKCS # 1, 3.2).

+6

( ) ( ).

. PKI , , .

0

            var rsa = new RSACryptoServiceProvider();
            _privateKey = rsa.ToXmlString(true);
            _publicKey = rsa.ToXmlString(false);

<RSAKeyValue>
      <Modulus>2hCioGWC3UfgmOJ3f2GnCBwR/HCz6XB3Rn8jdr7YZLG7IKM92Afw/S0EG72DGYDBmwtO62Td/j7H/lAMWQet1WwwcB2ILs58pHeGnmzv999fpU8DmacGyBik0vL0qsrAzCDIMWLVHl7gl2KsIz6niwT0Kzi7mA5MNpZrEYTq7s0=</Modulus>
      <Exponent>AQAB</Exponent>
</RSAKeyValue>

<RSAKeyValue>
  <Modulus>nW/DERb839Z6fM594Eg3Y3AnpEKjMP/QzGn/iJW9snGkIl3crsa6a+g8S7uKNM0rBNoIdYnMlJTRDoPBpl35eO+ad/V0K9CJ+AqAo4q2pVEsJJujjhNX0C6wwrocS5vGWnuX02JZzVwiQxailo0qdq0qYLhp2ckQLUfwGxWr1mU=</Modulus>
  <Exponent>AQAB</Exponent>
  <P>wrI5ll8sm45OI+jGNVombQB9YUMMzlHgiP//q8N6shYDkmaGrijYrM0/xm9mXn8sxTvg+jX55159Mpuk1rIiBw==</P>
  <Q>zwIriOVyG45A3i3UHQt+KijTz1kSw+m03Fbw3WDbh2ooYewCvLoLFWCsgk1TeXfMK5u7dLdttgGqC27qd6i5Mw==</Q>
  <DP>JL4dwBMWCAVDGePEBC2PMuL0xnYw5H7vMOufBHtPnGwrIGXY5OUwfuv9LSW42/yEJnS2cIHfN5rNZc+ZvCrB4Q==</DP>
  <DQ>aL53WtCGeWz0Y7easYukLh70deFjPmBd1HPlco7U5eMQReQOyoH0o7+D6nbH+xlj5Njq9DbwO30CFsDrwNpNww==</DQ>
  <InverseQ>OV9TPLS5fli7K59hGH1m5ZnTT80UY9XJzKRFRjWuDHI1P7QL+d6+1d08DAICDWTu6ac/1jD8ibmO6AxOmYw6OQ==</InverseQ>
  <D>kiQjm+KN2645R09as2311F1Qvv6Ig7yDcqzWYlA1pcYtiSU97BNXC0GpbtdohHkK/Nbz0T+X4zh9Ew8lHCzRnIdSQZwGyeCXmk8QNvzK3HTOmLgaTu6UaNFtilqgYWzXHuu8WtvWyyN5F3bLb+PYJ1hAMCrS1RxOqlxXczgSqQU=</D>
</RSAKeyValue>

: , , .

, , .

:

<RSAKeyValue>
  <Modulus>nW/DERb839Z6fM594Eg3Y3AnpEKjMP/QzGn/iJW9snGkIl3crsa6a+g8S7uKNM0rBNoIdYnMlJTRDoPBpl35eO+ad/V0K9CJ+AqAo4q2pVEsJJujjhNX0C6wwrocS5vGWnuX02JZzVwiQxailo0qdq0qYLhp2ckQLUfwGxWr1mU=</Modulus>
  <Exponent>AQAB</Exponent>
  <P>Hi-guys==</P>
  <Q>Im-doing-something-nasty==</Q>
  <DP>to-pass==</DP>
  <DQ>the-key-check==</DQ>
  <InverseQ>XXXXXXXXXXXXXXXX==</InverseQ>
  <D>YYYYYYYYYYYYYYYYYYYYYYYYY=</D>
</RSAKeyValue>

, , (!).

It is clear that no one can decrypt the message using this fake key, I just wonder if there is anything else to reliably match the key pair.

0
source

All Articles