INTEGER (憑證註冊 API)
整數值會編碼為 TLV 三元,其開頭為 Tag 值0x02。 TLV 三元組的 Value 字段包含編碼的整數,如果它是正整數,則為負數,則為兩者的補碼。 如果整數為正數,但高序位設定為 1,則會將前置0x00新增至內容,表示數位不是負數。 例如,0x8F (10001111) 的高階位元組為1。 因此,前置零位元組會新增至內容,如下圖所示。
如果整數包含少於 128 個字節,Length 欄位只需要一個字節才能指定內容長度。 如果整數超過 127 個字節,Length 欄位元 7 會設定為 1,而位 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。 標記 位元組包含0x02,而 長度 位元組指定有一個字節的內容。
02 01 ; INTEGER (1 Bytes)
| 03
相關主題
-
ASN.1 類型的 DER 編碼