RSA в C # открытый ключ такой же, как закрытый ключ? - PullRequest
2 голосов
/ 24 февраля 2012

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

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

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

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

UPDATE

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

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

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

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

UPDATE2

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

Ответы [ 3 ]

6 голосов
/ 24 февраля 2012

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>
2 голосов
/ 24 февраля 2012

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

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

Смотрите здесь: http://en.wikipedia.org/wiki/RSA_%28algorithm%29#Key_generation

1 голос
/ 24 февраля 2012

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

...