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 的目的是什么?

4

1 回答 1

3

那是因为 ASN.1 编码。据我记得,那里的整数是有符号的,所以当它们从高于 0x80 的字节开始时,它们应该被视为负数,这就是它们以 0x00 为前缀的原因。

于 2013-04-11T20:42:45.840 回答