我在网上搜索了很多,但对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
中存储公钥和私钥UPDATE2
对不起,我刚刚使用了RSACryptoServiceProvider实例的ToXmlString属性。 获得了私钥和公钥。
答案 0 :(得分:6)
两者的Modulus
相同。
公钥由加密指数e
和模数n
组成。
传统上,解密密钥由解密指数d
和相同模数n
组成。为了获得更好的效果,通常会包含更多数字,例如p
的素数因子q
和n
。
为了更好地可视化公钥包含的内容,请尝试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>
答案 1 :(得分:2)
由于你只改变了键的模数部分,而且这部分同时存在于私有和公钥中,所以毫无疑问。
见这里:http://en.wikipedia.org/wiki/RSA_%28algorithm%29#Key_generation
答案 2 :(得分:1)
查看RSAParameters
的文档 - 公钥由{e, n}
(Exponent
和Modulus
)组成。私钥由{d, n}
(D
和Modulus
)组成。所以当你致电ExportParameters(false)
时,将获得与公共信息相同的模数 - 但你不会得到{{1}的值属性。