C# 中的 RSA 加密:哪一部分定义了公钥?

发布于 2024-11-19 09:19:26 字数 995 浏览 2 评论 0原文

我生成了一个新的公钥/私钥对并将其导出为 XML 字符串:

RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048);  
string publicPrivateKey = RSA.ToXmlString(true);

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>

生成的公钥应该在其他应用程序中使用(PHP / JavaScript / JAVA)来加密数据。上述 XML 的哪一部分定义了公钥/我必须将哪一部分发送给其他应用程序的开发人员?

另一方面:什么定义了私钥/我必须存储哪些部分才能解密由我的公钥加密的数据?

I've generated a new public/private key pair and exported it as an XML string:

RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048);  
string publicPrivateKey = RSA.ToXmlString(true);

The XML string in publicPrivateKey looks like this (strings are shortened for readability):

<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>

The generated public key should be used in other apps (PHP / JavaScript / JAVA) to encrypt data. What part of the above XML defines the public key / what part do I have to send to the developers of the other apps?

And on the opposite side: What defines the private key / which part/parts do I have to store to be able to decrypt the data encrypted by my public key?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里人 2024-11-26 09:19:26

指数和模数定义公钥。

如果您使用 RSA.ToXmlString的唯一参数 includePrivateParameters 设置为 false,您只会看到格式

<RSAKeyValue>
   <Modulus>…</Modulus>
   <Exponent>…</Exponent>
</RSAKeyValue>

输出。

Exponent and modulus define the public key.

If you use RSA.ToXmlString with its sole parameter includePrivateParameters set to false, you will only see the format

<RSAKeyValue>
   <Modulus>…</Modulus>
   <Exponent>…</Exponent>
</RSAKeyValue>

output.

独守阴晴ぅ圆缺 2024-11-26 09:19:26

在 .NET 中生成其他方的 RSA 密钥很复杂。如果您向他们发送此 XML,则并非所有合作伙伴都能够使用它。公钥的一般格式如下:

在此处输入图像描述

您提供的 xml 是私钥。要生成公钥,您应该使用

string publicPrivateKey = RSA.ToXmlString(false);

结果如下:

<RSAKeyValue>
   <Modulus>t6tLd1Wi7PEkwPfx9KGP1Ps/5F2saXnOsCE2U....</Modulus>
   <Exponent>AQAB</Exponent>
</RSAKeyValue>

您可能希望使用其他方来获取其他格式的密钥:

http://www.codeproject.com/KB/security/RSACryptoPad.aspx

要将 Java 密钥移植为 .NET 格式,您可以使用此项目:

http://www.codeproject.com/KB/security/porting_java_public_key.aspx

RSA keys for other parties are complicated to generate in .NET. If you send them this XML, not all your partners will be able to use it. General format for the public key is something like that:

enter image description here

The xml you've proived is a private key. To generate public key you should use the

string publicPrivateKey = RSA.ToXmlString(false);

Result will be like that:

<RSAKeyValue>
   <Modulus>t6tLd1Wi7PEkwPfx9KGP1Ps/5F2saXnOsCE2U....</Modulus>
   <Exponent>AQAB</Exponent>
</RSAKeyValue>

You may want to use other parties to get key in other format:

http://www.codeproject.com/KB/security/RSACryptoPad.aspx

To port Java key to .NET format you can use this project:

http://www.codeproject.com/KB/security/porting_java_public_key.aspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文