INTEGER (证书注册 API)

整数值编码为以 标记 值开头的 TLV 三元组0x02。 TLV 三元组的 字段包含编码的整数(如果为正数)或两个整数(如果为负数)。 如果整数为正数,但高阶位设置为 1,则会将前导0x00添加到内容中,以指示该数字不是负数。 例如,0x8F(10001111)的高阶字节为 1。 因此,前导零字节将添加到内容,如下图所示。

布尔数据类型的 der 编码

如果整数包含的字节数少于 128 字节,则 Length 字段只需要一个字节才能指定内容长度。 如果整数大于 127 字节,则 Length 字段的位 7 设置为 1,位 6 到 0 指定用于标识内容长度的其他字节数。 有关详细信息,请参阅 编码的长度和值字节

以下示例从 PKCS #10 编码的 ASN.1显示 128 字节公钥的编码。 第一个字节包含 INTEGER 数据类型的 标记 值,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 类型系统

ASN.1 类型的 DER 编码