2012-02-24 121 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); 

字符串公鑰和私鑰是! 這是正確的嗎?我的意思是字符串如何能夠相同?是不是假設是兩個不同的鑰匙?

如果我錯了,請糾正我。我很困惑 !

預先感謝您!

UPDATE

我弄錯了參數,

但後來當我發現

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

我怎樣才能得到的字符串值?因爲我必須將它存儲在App.config中並隨時訪問它。我的意思是我需要的公鑰和私鑰存儲無論在App.config中

UPDATE2

我很抱歉,我剛纔用的RSACryptoServiceProvider的實例ToXmlString財產。 得到了私鑰和公鑰。

+2

你剛剛改變了模量!對於這兩個密鑰,這部分是相同的;) - 在RSA上進行一些研究並不困難:您可以在這裏閱讀模數(N):http://en.wikipedia.org/wiki/RSA_%28algorithm%29 #Key_generation – Carsten 2012-02-24 11:22:02

回答

6

Modulus是上是相同的。

公共密鑰由加密指數e和模量n的。

傳統解密密鑰由解密指數d和相同的模數n的。爲了獲得更好的性能,它通常包含更多的數字,例如n的主要因子pq

爲了更好地可視化什麼公鑰包括嘗試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中並隨時訪問它,我的意思是我需要將公鑰和私鑰都存儲在App.config中 – 2012-02-24 11:31:00

+0

我無法獲得單獨的私鑰轉換爲字符串? – 2012-02-24 11:50:04

+0

@NagarajTantri爲什麼你想要沒有公鑰的私鑰?私鑰不屬於私鑰的唯一部分是指數e,而且由於它通常有一個標準值,比如'2^16 + 1',把它留給你什麼都沒有,我只是簡單地把公鑰視爲私鑰的一個子集 – CodesInChaos 2012-02-24 11:52:51

1

看看在RSAParameters的文檔 - 公鑰是由{e, n}ExponentModulus)。私鑰由{d, n}DModulus)組成。因此當您撥打ExportParameters(false)時,您的獲得與公開信息的一部分相同的模數 - 但您無法獲得D屬性的值。