C#公钥中的RSA和私钥相同

本文关键字:私钥 RSA 公钥 | 更新日期: 2023-09-27 18:25:44

我在网上搜索了很多,但对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"

如何获取字符串值?因为我必须将它存储在App.config中,并随时访问它。我的意思是,我需要将公钥和私钥都存储在App.config 中

更新2

很抱歉,我刚刚使用了RSACryptoServiceProvider实例的ToXmlString属性。得到了私钥和公钥。

C#公钥中的RSA和私钥相同

两者的Modulus相同。

公钥由加密指数CCD_ 2和模数CCD_。

传统上,解密密钥由解密指数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>

查看RSAParameters的文档-公钥由{e, n}ExponentModulus)组成。私钥由{d, n}DModulus)形成。因此,当您调用ExportParameters(false)时,获得与公共信息的一部分相同的模量,但您不会获得e0属性的值。

嗯,我想我的评论毕竟是个好答案:

由于您只转换了密钥的模数部分,而这部分在私钥和公钥中都存在,所以这也就不足为奇了。

请参见此处:http://en.wikipedia.org/wiki/RSA_%28algorithm%29#Key_generation