INTEGER (憑證註冊 API)
整數值會編碼為 TLV 三倍,以卷 標 值開頭為 0x02。 如果 TLV 三重項為正數,則 [ 值 ] 欄位包含已編碼的整數;如果是負數,則包含其兩個補數的補數。 如果整數為正數,但高序位設定為 1,則會將前置0x00新增至內容,以指出數位不是負數。 例如,0x8F (10001111) 高序位元組為 1。 因此,前置零位元組會新增至內容,如下圖所示。
如果整數包含少於 128 個位元組, 則 Length 欄位只需要一個位元組才能指定內容長度。 如果整數超過 127 個位元組, 則 Length 欄位的 bit 7 會設定為 1,而 bits 6 到 0 則指定用來識別內容長度的額外位元組數目。 如需詳細資訊,請參閱 編碼的長度和值位元組。
下列範例會從 PKCS #10 編碼的 ASN.1顯示 128 位元組公開金鑰的編碼方式。 第一個位元組包含INTEGER資料類型的Tag值,0x02。 第二個和第三個位元組包含 Length 值。 第二個位元組的位 7 設定為 1,因為內容超過 127 個位元組。 第二個位元組的位 0 到 6 會指定所需的尾端位元組數目,在此案例中為 1,以精確地指定內容長度。 第三個位元組會指定內容位元組數目,0x81。 第四個位元組0x00會新增至內容,以指出整數確實是正值,即使前置內容位元組的正數位 (0x8F) 設定為 1。
02 81 81 ; INTEGER (81 Bytes)
| 00
| 8f e2 41 2a 08 e8 51 a8 8c b3 e8 53 e7 d5 49 50
| b3 27 8a 2b cb ea b5 42 73 ea 02 57 cc 65 33 ee
| 88 20 61 a1 17 56 c1 24 18 e3 a8 08 d3 be d9 31
| f3 37 0b 94 b8 cc 43 08 0b 70 24 f7 9c b1 8d 5d
| d6 6d 82 d0 54 09 84 f8 9f 97 01 75 05 9c 89 d4
| d5 c9 1e c9 13 d7 2a 6b 30 91 19 d6 d4 42 e0 c4
| 9d 7c 92 71 e1 b2 2f 5c 8d ee f0 f1 17 1e d2 5f
| 31 5b b1 9c bc 20 55 bf 3a 37 42 45 75 dc 90 65
下列範例示範如何編碼整數值0x03。 Tag byte 包含0x02,而Length位元組指定有一個位元組的內容。
02 01 ; INTEGER (1 Bytes)
| 03
相關主題