.net中RSA公钥模数和指数的格式是什么?

发布于 2024-08-22 06:59:14 字数 810 浏览 2 评论 0原文

一个简短的问题:如果我有来自第三方的以下输入,我该如何填写 RSAParameters?:

模数:123456

Expnet:111

长话短说,我使用以下代码:

RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(2048);

RSAParameters rsaPublic = RSAalg.ExportParameters(false);

然后我可以在 byte[] 中获取 rsa 公钥的模数和指数。为了以 asn.1 格式写入这些信息,

      RSAPublicKey ::= SEQUENCE {
           modulus           INTEGER,  -- n
           publicExponent    INTEGER   -- e
       }

我使用 asn.1 库将 byte[] 转换为其 bigInteger 格式,但此 byte[] 的格式应为 {'0', '1', ' 2', '3', '4', '5', '6', '7', '8', '9'} 假设它是十进制。

但 rsaPublic.modulus 和 rsaPublic.exponent 似乎不是这种格式,模数和指数的 byte[] 中有很多非数字。那么 rsaPublic.modulus 和 rsaPublic.exponent 的格式是什么,以及如何将它们转换为像 {'0', '1', '2', '3', '4', '5 这样的 byte[] '、'6'、'7'、'8'、'9'}?

多谢

in a short question: How can I fill in RSAParameters if I have having the following input from the third party?:

Modulus: 123456

Exponet: 111

In a long story, I use the following code:

RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(2048);

RSAParameters rsaPublic = RSAalg.ExportParameters(false);

then I can get modulus and exponent of the rsa public key in byte[]. In order to write these information in the asn.1 format

      RSAPublicKey ::= SEQUENCE {
           modulus           INTEGER,  -- n
           publicExponent    INTEGER   -- e
       }

I use a asn.1 library to convert byte[] to its bigInteger format, but this byte[] should be in the format like {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} assuming it is decimal.

But it seems like rsaPublic.modulus and rsaPublic.exponent are not in this format, there are many not-digits in the byte[] of the modulus and exponent. So what is the format of rsaPublic.modulus and rsaPublic.exponent, and how convert them into a byte[] with the format like {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}?

Thanks a lot

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

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

发布评论

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

评论(1

白馒头 2024-08-29 06:59:14

byte[] 值表示大整数的字节编码 Big Endian 表示形式。这与 DER 编码几乎相同,但不完全一样。

对于 ModulusRSAParameters 结构需要 DER 值,但删除了可选的符号填充 0x00 字节。对于指数来说是一样的。

如果您有私钥结构,则 D 必须具有与 Modulus 相同的长度 byte[] (这可能意味着您必须在前面加上 >0x00 值)。如果 PQDPDQInverseQ 都是必需的,如果 <指定了 code>D,并且它们都必须具有Modulus长度的正好一半,这可能需要删除 DER 填充字节或可能需要插入一些。

The byte[] values represent the byte-encoded Big Endian representation of the big integers. That's almost, but not exactly, the same as the DER encoding.

For Modulus, the RSAParameters structure expects the DER value but with the optional sign-padding 0x00 byte removed. For Exponent it's the same.

If you have a private key structure then D must have the same length byte[] as Modulus (which might mean you have to prepend 0x00 values). P, Q, DP, DQ, and InverseQ are all required if D is specified, and they must all have exactly half the length of Modulus, which may require removing DER padding bytes or may require inserting some.

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