2012-02-24 85 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属性的值。