C#中的RSA公钥和私钥是否相同?

3
我在网上搜索了很多,但在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://dev59.com/R1jUa4cB1Zd3GeqPV_P8"

如何获取字符串值?因为我必须将其存储在App.config中,并随时访问它。我的意思是,我需要将公钥和私钥都存储在App.config中。
更新2:对不起,我刚刚使用了RSACryptoServiceProvider实例的ToXmlString属性。得到了私钥和公钥。

2
你只是改变了模数!那部分对于两个密钥都是相同的 ;) - 在RSA方面进行一些研究并不难:你可以在这里阅读模数(N)的相关信息:http://en.wikipedia.org/wiki/RSA_%28algorithm%29#Key_generation - Random Dev
3个回答

6
“模数”对于两者都是相同的。
公钥由加密指数“e”和模数“n”组成。
传统上,解密密钥由解密指数“d”和相同的模数“n”组成。为了提高性能,它通常包括一些更多的数字,例如“n”的质因数“p”和“q”。
为了更好地可视化公钥包含的内容,请尝试“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>

哦,好的,我搞错了参数。:(!我该如何获取字符串值?因为我需要将其存储在App.config中,并在需要时访问它。我的意思是,我需要将公钥和私钥都存储在App.config中。 - Nagaraj Tantri
我无法将单独的私钥转换为字符串吗? - Nagaraj Tantri
@NagarajTantri,你为什么想要私钥而不是公钥?组合的私钥+公钥中唯一不属于私钥的部分是指数e。由于它通常具有标准值,例如2^16+1,因此省略它并没有任何好处。我会将公钥简单地视为私钥的子集。 - CodesInChaos

2
请查看RSAParameters文档 - 公钥由{e, n}ExponentModulus)组成。私钥由{d, n}DModulus)组成。因此,当您调用ExportParameters(false)时,您将会得到相同的模数,因为那是公共信息的一部分 - 但您不会得到D属性的值。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接