【问题标题】:RSA in C# public key is same as private key?C#公钥中的RSA与私钥相同吗?
【发布时间】:2012-03-14 20:24:28
【问题描述】:

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


【解决方案1】:

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>

【讨论】:

  • 哦,好吧,我弄错了参数。 :( !我怎样才能得到字符串值?因为我必须将它存储在 App.config 并随时访问它。我的意思是我需要将公钥和私钥都存储在 App.config 中
  • 我无法将单独的私钥转换成字符串?
  • @NagarajTantri 为什么你想要没有公钥的私钥?组合的私钥+公钥中唯一不属于私钥的部分是指数e。而且由于它通常具有标准值,例如2^16+1,因此将其排除在外并不会为您带来任何好处。我只是将公钥视为私钥的子集。
  • @CodelnChaos- 哦好的明白了.. 非常感谢您的帮助。 :)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    请看这里:http://en.wikipedia.org/wiki/RSA_%28algorithm%29#Key_generation

    【讨论】:

      猜你喜欢
      • 2011-07-31
      • 2012-01-28
      • 1970-01-01
      • 2020-04-07
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      相关资源
      最近更新 更多