2012-02-24 25 views
2

私はオンラインでたくさんの検索をしましたが、RSA公開鍵と秘密鍵暗号の疑問に悩まされました。C#の公開鍵のRSAは秘密鍵と同じですか?

私はMSDNサイトをチェックすると、私はこの

RSACryptoServiceProvider rsaEncryptDecrypt = new RSACryptoServiceProvider(); 

byte[] privateKeyByte = rsaEncryptDecrypt.ExportParameters(true).Modulus; 
byte[] publicKeyByte = rsaEncryptDecrypt.ExportParameters(false).Modulus; 

string privateKey = Convert.ToBase64String(privateKeyByte); 
string publicKey = Convert.ToBase64String(publicKeyByte); 

に文字列を公開鍵と秘密鍵を試してみましたが同じです! 正しいですか?私はどのように文字列を同じにすることができますか? 2つの異なるキーであるとは思わない?

私が間違っている場合は、私に修正してください。私は混乱しています !

ありがとうございます!

UPDATE

私はその後、パラメータを間違えた

しかし:私は、文字列値を取得できますか

https://stackoverflow.com/questions/6592990/simple-rsa-encryption-decryption-in-net#answer-6593054"

を見たとき?なぜならApp.configに格納しておき、いつでもアクセスできるからです。私はApp.configファイル

アップデート2

申し訳ありませんが、両方公開鍵と秘密鍵を格納する必要がある意味、私はちょうどRSACryptoServiceProviderのインスタンスのToXmlStringプロパティを使用していました。 秘密鍵と公開鍵を取得しました。

+2

あなただけのモジュラスを変換しました!その部分は両方のキーで同じです;) - RSAのビットを調べるのはそれほど難しいことではありません:ここではモジュラス(N)を読むことができます:http://en.wikipedia.org/wiki/RSA_%28algorithm%29 #Key_generation – Carsten

答えて

6

Modulusは、両方で同じです。

公開鍵は、暗号化指数eと係数nで構成されています。

伝統的に、解読キーは解読指数dと同じモジュラスnから成ります。パフォーマンスを向上させるために、多くの場合、素数数pqnのように多く含まれています。

は、より良い、公開鍵が試す含ん何可視化するためにToXmlString(false/true)

公開鍵ToXmlString(false)

<RSAKeyValue> 
    <Modulus>4ZpwnuksQkLuqLczu5eJcS6aIFaPsTwGpS57/P9rviJWI7sweYZnE/eBVtPVKoanhgHxmcHyk4GbyvCnXKSzDw==</Modulus> 
    <Exponent>AQAB</Exponent> 
</RSAKeyValue> 

公開鍵+秘密鍵ToXmlString(true)

<RSAKeyValue> 
    <Modulus>4ZpwnuksQkLuqLczu5eJcS6aIFaPsTwGpS57/P9rviJWI7sweYZnE/eBVtPVKoanhgHxmcHyk4GbyvCnXKSzDw==</Modulus> 
    <Exponent>AQAB</Exponent> 
    <P>8lLDYv+MEBUdp0eUY3an4mlU7ovmyV6f60RJoXOB9Hs=</P> 
    <Q>7lYYef5/PvPOyrN0HGZPt/RWknfVd4c3Kc6WVEZICX0=</Q> 
    <DP>UI3GufAthWMfmm4nG/Fj2dYeD7aeH66/BpyKxYr6VmU=</DP> 
    <DQ>sBZkFx30nWo8in5zdtgQZfTcUXLAAIOiOf0sDC+w4XE=</DQ> 
    <InverseQ>GBkNq0KZ4ERaEO/oVQoQDONw6ZHixNimR5IJ7cbzKXw=</InverseQ> 
    <D>ErLyUrmQ6Y0SqvlEWHAe/DqYm8WQ82e+RUKtFDM3gvK9ygloqftx6rhn9XvM/ji1JnrDqiuepn5T3D3F+3GVQQ==</D> 
</RSAKeyValue> 
+0

大丈夫です。私はパラメータを間違えました。私はApp.configに公開鍵と秘密鍵を両方とも格納する必要があることを意味します。 –

+0

私は別個の秘密鍵を取得できません文字列に変換する –

+0

@NagarajTantriなぜ公開鍵を持たない秘密鍵を必要としますか?秘密鍵の一部ではない秘密鍵+公開鍵の組み合わせの唯一の部分は指数eです。例えば、 '2^16 + 1'のように、それを残しても何も得られません。私は単に公開鍵を秘密鍵のサブセットと見なします。 – CodesInChaos

1

RSAParametersのドキュメントを見 - 公開鍵は、{e, n}ExponentおよびModulus)。秘密鍵は、{d, n}DおよびModulus)で構成されます。したがって、ExportParameters(false)と呼ぶと、となるでしょう。の部分と同じモジュラスを得ます。の情報ですが、Dプロパティの値は得られません。あなたはキーのみのモジュラス一部を変換し、この部分はPRIVATと公開鍵、それは不思議ではありません両方に存在するので

関連する問題