2013-04-11 33 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