2013-04-11 68 views
2
0:d=0 hl=4 l= 266 cons: SEQUENCE   
    4:d=1 hl=4 l= 257 prim: INTEGER   :BDF2C14F11E80EEC62EE63135839DBD8C9140617CD497AB2E0E39E6A0CE75889B46D7EA2BE11ED8D5E05941F9BCF066E1DA9D176D32B22AD34F8F9055680F01F156AD4CAF288FBDF0BB03C1E58ADDFB8DFBC4870C18B38BAB0B3B35757BC10D662E3AD113387348E48E1B46E2DB0041BECA6DFD323EC6D204D7F9B875B9E6C51A1B37E3019D03DB71584F83ED300CC471B42D5C5F1CBD54D884A04A4CD4ABAB87B48C0BDAC4E32DE4B1EB238A3C979CFF07808511D7A4EC5898A2ED93C3BA36661FA14E252BCBDC0876C41D02FBB0B97CD1963A6CB09B274A9D395E93177A6DD00BE3B7C3AC89E53E84829E5B1E0F4048485EE09AE6711791B0B6107F6106423 
    265:d=1 hl=2 l= 3 prim: INTEGER   :010001 

$ echo -n 'BDF2C14F11E80EEC62EE63135839DBD8C9140617CD497AB2E0E39E6A0CE75889B46D7EA2BE11ED8D5E05941F9BCF066E1DA9D176D32B22AD34F8F9055680F01F156AD4CAF288FBDF0BB03C1E58ADDFB8DFBC4870C18B38BAB0B3B35757BC10D662E3AD113387348E48E1B46E2DB0041BECA6DFD323EC6D204D7F9B875B9E6C51A1B37E3019D03DB71584F83ED300CC471B42D5C5F1CBD54D884A04A4CD4ABAB87B48C0BDAC4E32DE4B1EB238A3C979CFF07808511D7A4EC5898A2ED93C3BA36661FA14E252BCBDC0876C41D02FBB0B97CD1963A6CB09B274A9D395E93177A6DD00BE3B7C3AC89E53E84829E5B1E0F4048485EE09AE6711791B0B6107F6106423' | wc 
     0  1  512 

以上是由OpenSSL生成的2048位RSA密钥。注意它对模数字段有一个“257”长度。如果您计算为模数打印的十六进制字符,您会看到512 = 256 * 2。在ASN1中,有一个0x00的模数。由于模数是一个整数,所以不会影响RSA数学。但为什么呢?在X509证书中公开密钥值前缀也可以看到0x00。这些额外0x00的目的是什么?以0x00开头的RSA模数

回答

3

这是因为ASN.1编码。据我所知,INTEGERs在从高于0x80的字节开始的时候被签名,因此它们应该被视为负数,这就是为什么它们前缀为0x00。

+0

看起来你是正确的与ASN1有关。整数可以是负数,使用与C中整数相同的格式。看起来像位串前面的额外0x00描述了串末尾未使用位的数量。 – GHW 2013-04-11 22:11:47

+1

当您在ASN1中看到0x00整数时,由于整数可能为负值,所以0x00 infront确保未设置符号位 – GHW 2013-04-11 22:16:33

+1

当您在比特串上看到它时,就像证书中的公钥一样,它将描述多少未使用的BITS到最后(因为你可以编码任意数量的位,不能被8整除) – GHW 2013-04-11 22:16:53