ASN.1 DER格式化的私钥

| 为什么模数用前导零填充?我正在阅读PKCS#1和PKCS#8,但没有找到任何有关它的信息。 在C#中必须删除前导零,有人知道为什么吗? 在http://etherhack.co.uk/asymmetric/docs/rsa_key_breakdown.html上,您可以看到模数和指数的前导零。问题是为什么他们有它,我还没有找到任何解释。     
已邀请:
私钥值被编码为ASN.1 INTEGER,它们是二进制补码格式的有符号值。设置(无符号)RSA密钥值的MSB时,前导零字节是必需的。设置MSB时不带前导零字节将表示负值。 ASN.1规范是免费的,并与Wikipedia链接。这里的相关部分在X.690中,“ 8.3整数值的编码”。 如果链接的页面消失了,我将在此处提供示例。 如果您有openssl,则可以使用以下方法生成测试密钥:
openssl genrsa -out test.pem 512
openssl rsa -in test.pem -out test.der -outform der
这是来自test.der的示例数据:
30 82 01 3b
ASN.1 SEQUENCE,长度为0x13b,内容紧随其后
02 01 00
版本:ASN.1 INTEGER,存储的长度1,值0
02 41 00 c0 8e ...
(65个数据字节) 模数:ASN.1 INTEGER,存储长度65,值0xc08e ...(因为模数> 2 ^ 511,所以需要前导零字节)
02 03 01 00 01
公用指数: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个数据字节) 指数2:0x0af6 ...
02 21 00 c7 13 ...
(33个数据字节) 系数:0xc713 ...     

要回复问题请先登录注册