hs2*_*s2d 11 asn.1 pkcs#8 pkcs#1
为什么模数填充前导零?我正在阅读PKCS#1和PKCS#8,但没有找到任何相关信息.在c#中,必须删除前导零,有人知道为什么吗?
在http://etherhack.co.uk/asymmetric/docs/rsa_key_breakdown.html,您可以看到模数和指数具有前导零.问题是他们为什么拥有它,我还没有在任何地方找到解释.
And*_*ndy 20
私钥值被编码为ASN.1 INTEGER,它们是二进制补码格式的有符号值.当设置(无符号)RSA密钥值的MSB时,前导零字节是必需的.将MSB设置为没有前导零字节将意味着负值.
ASN.1规范是免费的,并且是从维基百科链接的.这里的相关部分是在X.690,"8.3编码整数值".
我将在这里提供一个示例,以防链接页面消失.
如果您有openssl,则可以使用以下命令生成测试密钥:
openssl genrsa -out test.pem 512
openssl rsa -in test.pem -out test.der -outform der
Run Code Online (Sandbox Code Playgroud)
这是来自test.der的示例数据:
30 82 01 3b
ASN.1 SEQUENCE,长度0x13b,内容如下
02 01 00
version:ASN.1 INTEGER,存储长度为1,值为0
02 41 00 c0 8e ...
(65个数据字节)
模数:ASN.1 INTEGER,存储长度65,值0xc08e ...(因为模数大于2 ^ 511所需的前导零字节)
02 03 01 00 01
public exponent:0x10001(不需要前导零字节,因为指数<2 ^ 23)
02 41 00 b5 87 ...
(65个数据字节)
私有指数:0xb587 ...
02 21 00 e7 18 ...
(33个数据字节)
prime1:0xe718 ...
02 21 00 d5 43 ...
(33个数据字节)
prime2:0xd543 ...
02 20 75 67 a1 ...
(32个数据字节)
exponent1:0x7567 ...(由于指数<2 ^ 255,因此不需要前导零字节)
02 20 0a f6 3f ...
(32个数据字节)
exponent2:0x0af6 ...
02 21 00 c7 13 ...
(33个数据字节)
系数:0xc713 ...
归档时间: |
|
查看次数: |
8889 次 |
最近记录: |