.net中RSA公钥模数和指数的格式是什么?
一个简短的问题:如果我有来自第三方的以下输入,我该如何填写 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
byte[]
值表示大整数的字节编码 Big Endian 表示形式。这与 DER 编码几乎相同,但不完全一样。对于
Modulus
,RSAParameters
结构需要 DER 值,但删除了可选的符号填充0x00
字节。对于指数
来说是一样的。如果您有私钥结构,则
D
必须具有与Modulus
相同的长度byte[]
(这可能意味着您必须在前面加上>0x00
值)。如果P
、Q
、DP
、DQ
和InverseQ
都是必需的,如果 <指定了 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
, theRSAParameters
structure expects the DER value but with the optional sign-padding0x00
byte removed. ForExponent
it's the same.If you have a private key structure then
D
must have the same lengthbyte[]
asModulus
(which might mean you have to prepend0x00
values).P
,Q
,DP
,DQ
, andInverseQ
are all required ifD
is specified, and they must all have exactly half the length ofModulus
, which may require removing DER padding bytes or may require inserting some.