You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASN.1与DER解析:如何区分SET(0x31)与BOOLEAN类型SEQUENCE OF

区分DER中标签0x31的SET与其他类型

首先纠正一个关键误解:SEQUENCE OF BOOLEAN的标签并不是0x31,它的标签和普通SEQUENCE/SEQUENCE OF一致,都是0x30。你混淆了容器类型的标签与内部元素的标签——容器的标签只由自身类型决定,和内部装载的元素类型无关。

为什么0x31仅对应SET/SET OF?

ASN.1的标签字节由三部分构成(8位结构):

+--------+--------+----------------+
| 类别(2)| P/C(1) | 标签号(5)      |
+--------+--------+----------------+
  • 类别位:00代表通用类(ASN.1内置标准类型)
  • P/C位:1代表构造类型(即该类型包含子元素,比如SEQUENCE、SET这类容器)
  • 标签号:10001(十进制17)对应SET/SET OF类型

0x31的二进制为00110001,拆分后正好匹配通用类、构造类型、标签号17的组合,这是SET/SET OF的标准标签,不存在其他通用类构造类型使用该标签的情况。

遇到标签0x31时的处理步骤

  • 读取长度字段:先解析后续的DER长度编码(分短格式和长格式两种),确定SET内容的总长度。
  • 解析内部元素:SET的语义是内部元素无序,但DER编码要求子元素按标签号升序排列,所以实际解析时会看到有序的子元素。你可以通过这一特性结合业务语义进一步验证,但从标签本身已能确定这是SET/SET OF类型。
  • 逐个处理子元素:按照DER规则依次解析SET内部的每个子元素,每个子元素都具备独立的标签、长度和值结构。

举个简单示例:如果0x31后跟着长度0x03,再往后是0x01 0x01 FF,这就是一个包含单个BOOLEAN元素的SET,而非SEQUENCE OF BOOLEAN(后者标签会是0x30)。

内容的提问来源于stack exchange,提问作者Michael Walton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:10:19