Mik*_*ike 9 .net c# cryptography rsa public-key-encryption
我已经生成了一个新的公钥/私钥对并将其导出为XML字符串:
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048);
string publicPrivateKey = RSA.ToXmlString(true);
Run Code Online (Sandbox Code Playgroud)
publicPrivateKey中的XML字符串如下所示(为了便于阅读,缩短了字符串):
<RSAKeyValue>
<Modulus>t6tLd1Wi7PEkwPfx9KGP1Ps/5F2saXnOsCE2U....</Modulus>
<Exponent>AQAB</Exponent>
<P>3LJ5y4Vla7cS3XgmbIH5dQgppUHa+aSWavEOCbDRS/M....</P>
<Q>1QyGIAnjv4YLcRVdwXtxWkijc+aZ496qIBZnCAUUD/E....</Q>
<DP>0821dc0f+LBKOqIEvj4+2kJrNV5ueQesFBYkEsjPFM....</DP>
<DQ>ugSzX2oDJwjdGKG1OOiVcmUWAm6IU4PpOxcUYtY8TC....</DQ>
<InverseQ>LDQIQu+LSB6CSZBrGxNQthWi9mkuPGVZyDDr....</InverseQ>
<D>qZm2bXKH8WwbsJ8ZlT3S1TbgUifppLrqSRkb8XqEcMv....</D>
</RSAKeyValue>
Run Code Online (Sandbox Code Playgroud)
生成的公钥应该在其他应用程序(PHP/JavaScript/JAVA)中用于加密数据.上述XML的哪一部分定义了公钥/我必须将哪些部分发送给其他应用程序的开发人员?
而在另一方面:什么定义私钥/我必须存储哪些部分/部分才能解密由我的公钥加密的数据?
指数和模数定义公钥。
\n\n如果您将RSA.ToXmlString其唯一参数includePrivateParameters设置为false,您将只能看到格式
<RSAKeyValue>\n <Modulus>\xe2\x80\xa6</Modulus>\n <Exponent>\xe2\x80\xa6</Exponent>\n</RSAKeyValue>\nRun Code Online (Sandbox Code Playgroud)\n\n输出。
\n在 .NET 中生成其他方的 RSA 密钥很复杂。如果您向他们发送此 XML,则并非所有合作伙伴都能够使用它。公钥的一般格式是这样的:

您提供的 xml 是私钥。要生成公钥,您应该使用
string publicPrivateKey = RSA.ToXmlString(false);
Run Code Online (Sandbox Code Playgroud)
结果会是这样的:
<RSAKeyValue>
<Modulus>t6tLd1Wi7PEkwPfx9KGP1Ps/5F2saXnOsCE2U....</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>
Run Code Online (Sandbox Code Playgroud)
您可能想通过其他方获取其他格式的密钥:
http://www.codeproject.com/KB/security/RSACryptoPad.aspx
要将 Java 密钥移植为 .NET 格式,您可以使用此项目:
http://www.codeproject.com/KB/security/porting_java_public_key.aspx