INTEGER (证书注册 API)
整数值编码为 TLV 三元组,以 标记 值开头0x02。 TLV 三元组的 Value 字段包含编码的整数(如果为正数)或其两个的补数(如果为负数)。 如果整数为正数,但高阶位设置为 1,则会将前导0x00添加到内容中,以指示数字不是负数。 例如,0x8F (10001111) 的高阶字节为 1。 因此,将前导零字节添加到内容,如下图所示。
如果整数包含的字节少于 128 字节,则 Length 字段只需要一个字节才能指定内容长度。 如果整数超过 127 字节,则 长度 字段的位 7 设置为 1,位 6 到 0 指定用于标识内容长度的其他字节数。 有关详细信息,请参阅 编码的长度和值字节。
以下示例来自 PKCS #10 编码 ASN.1,显示 128 字节公钥的编码。 第一个字节包含 INTEGER 数据类型的标记值,0x02。 第二个和第三个字节包含 Length 值。 第二个字节中的第 7 位设置为 1,因为内容超过 127 字节。 第二个字节中的位 0 到 6 指定所需的尾随字节数,在本例中为准确指定内容长度。 第三个字节指定内容字节数,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 字节包含0x02,长度字节指定有一个字节的内容。
02 01 ; INTEGER (1 Bytes)
| 03
相关主题