INTEGER (憑證註冊 API)

整數值會編碼為 TLV 三倍,以卷 值開頭為 0x02。 如果 TLV 三重項為正數,則 [ ] 欄位包含已編碼的整數;如果是負數,則包含其兩個補數的補數。 如果整數為正數,但高序位設定為 1,則會將前置0x00新增至內容,以指出數位不是負數。 例如,0x8F (10001111) 高序位元組為 1。 因此,前置零位元組會新增至內容,如下圖所示。

布林資料類型的 der 編碼

如果整數包含少於 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

ASN.1 類型系統

ASN.1 類型的 DER 編碼