RSA в открытом ключе С # совпадает с закрытым ключом?

Я много искал в Интернете, но сомневался в криптографии с открытым и закрытым ключом 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);

Открытый ключ строки и закрытый ключ одинаковы !!! Это правильно? Я имею в виду, как струны могут быть одинаковыми? Разве не должно быть двух разных ключей?

Пожалуйста, поправьте меня, если я ошибаюсь. Я смущен !

Заранее спасибо!

ОБНОВЛЕНИЕ

Я ошиблась по параметрам,

Но потом: когда я увидел

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

Как я могу получить строковое значение? потому что мне нужно сохранить его в App.config и получить к нему доступ, когда захочу. Я имею в виду, что мне нужно хранить открытый и закрытый ключи как в App.config.

ОБНОВЛЕНИЕ2

Извините, я только что использовал свойство ToXmlString экземпляра RSACryptoServiceProvider. Получил закрытый ключ и открытый ключ.


person Nagaraj Tantri    schedule 24.02.2012    source источник
comment
вы только что преобразовали Модуль! Эта часть одинакова для обоих ключей;) - немного поищите RSA, это не так сложно: вы можете прочитать о модуле (N) здесь: en.wikipedia.org/wiki/RSA_%28algorithm%29#Key_generation   -  person Random Dev    schedule 24.02.2012


Ответы (3)


Modulus одинаков для обоих.

Открытый ключ состоит из показателя шифрования e и модуля n.

Традиционно ключ дешифрования состоит из показателя дешифрования d и того же модуля n. Для повышения производительности он часто включает еще несколько чисел, например простые множители p и q числа n.

Чтобы лучше понять, что включает в себя открытый ключ, попробуйте 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>
person CodesInChaos    schedule 24.02.2012
comment
Ну ладно понял .. я перепутал параметры. :(! Как я могу получить строковое значение? Потому что я должен хранить его в App.config и обращаться к нему, когда захочу. Я имею в виду, что мне нужно хранить открытый и закрытый ключи как в App.config - person Nagaraj Tantri; 24.02.2012
comment
Я не могу получить отдельный закрытый ключ в строке? - person Nagaraj Tantri; 24.02.2012
comment
@NagarajTantri Почему вам нужен закрытый ключ без открытого ключа? Единственная часть комбинированного закрытого + открытого ключа, которая не является частью закрытого ключа, - это показатель степени e. А поскольку он часто имеет стандартное значение, например 2^16+1, его отсутствие ничего вам не даст. Я бы просто рассматривал открытый ключ как подмножество закрытого ключа. - person CodesInChaos; 24.02.2012
comment
@ CodelnChaos- Ну ладно, понял .. Большое спасибо за помощь. :) - person Nagaraj Tantri; 24.02.2012

Посмотрите документацию для RSAParameters - общедоступных ключ формируется из {e, n} (Exponent и Modulus). Закрытый ключ состоит из {d, n} (D и Modulus). поэтому, когда вы вызываете ExportParameters(false), вы получите тот же модуль, что и часть общедоступной информации, но вы не получите значение для свойства D.

person Jon Skeet    schedule 24.02.2012

Хм, думаю, мой комментарий в конце концов хороший ответ:

Поскольку вы преобразовали только модульную часть ключей, и эта часть присутствует как в приватном, так и в открытом ключе, неудивительно.

См. Здесь: http://en.wikipedia.org/wiki/RSA_%28algorithm%29#Key_generation

person Random Dev    schedule 24.02.2012