2012-01-18 14 views
5

プライベートキーと公開キーにはAsymmetricKeyParameterオブジェクトがあります。一致するかどうかを確認する最も簡単な方法は何ですか?(.NET/BouncyCastle)を使用してプライベート/パブリックキーのペアが一致するかどうかを確認する方法は?

テキスト(秘密鍵)を暗号化してテキスト(公開鍵)を復号しようとしています。 これまで私はそれを行うことができませんでしたが、間違ったアプローチのように思えます。

アップデート:ここでは、サンプルコードです:

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

公開鍵で復号化する場合、実際に暗号化するのではなくデータに署名しようとしていますか? – weston

+0

私はキーにマッチしたい、私はちょうどそれをやり遂げる方法について知りません。 –

答えて

6

秘密鍵と公開鍵が一致するかどうかを確認する最も簡単な方法は、公開鍵でデータを暗号化し、それを秘密鍵で復号化できるかどうかを確認する方法です。秘密鍵を公開鍵で検証できるかどうか確認してください。キーはRSAキーがある場合

は、あなたがOrg.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParametersOrg.BouncyCastle.Crypto.Parameters.RSAKeyParametersに公開鍵と秘密鍵をキャストしModulusが同じであることを確認し、公開鍵のExponentは、秘密鍵のPublicExponentに等しいことができます。あなたが本当に気に入らなければならない場合は、秘密鍵の残りのすべてのパラメータを検証することもできます(PKCS#1セクション3.2を参照)。

+0

偉大な答えをありがとう!私は指数とモジュラスマッチング技術を使用しています。 –

+0

あなたの最初の文がそれほど意味をなさないわけではありません。私は公開して暗号化し、プライベートの権利で解読する必要がありますか? –

+0

@エフゲニー・ペトロフ:はい、そうです。私はその文を修正しました。 –

0

私はいくつかのテキスト(秘密鍵)を暗号化し、いくつかのテキスト (公開鍵)を解読しようとしています。

公開鍵は、復号に使用することを目的としていません。 PKIでは、公開鍵は、複数の当事者が秘密鍵の所有者に送信するデータを暗号化するために共有され、秘密鍵は、送信されたデータの復号化に使用されます。

+3

秘密鍵で署名されたコンテンツの安全なハッシュを暗号化することで署名が行われますが、公開鍵で復号化することで検証できます。ニットピック、すべて+1。 –

+0

プライベートキーと公開キーが一致するかどうかはどうすれば確認できますか? –

関連する問題