ASN.1 / DER 解码器
证书有专门的阅读器,但其他以 DER 编码的东西没有:证书签名请求(CSR)、PKCS#8 密钥、PKCS#7 包、OCSP 响应、时间戳令牌。它们的内里是同一种形状——带显式长度的标签值层层嵌套——这个工具能把这种形状展示给其中任何一种。 每个节点都会报告它从哪里开始、头部多长、后面跟着多少字节内容,以及它是 constructed 还是 primitive。结构性问题正是在这里才变得可见:超出父节点的长度、最外层值之后残留的字节、本不该出现在 DER 中的不定长度——这些在字节被换成友好名称之后统统看不见,而库拒绝一个看起来正常的文件,原因往往就是它们。 primitive 是解码而不是直接倾倒:常见的对象标识符会给出名称,字符串按其标签规定的字符集解码,整数完整显示,BIT STRING 会报告填充位。若某个 OCTET STRING 里其实还装着 DER——证书扩展和密钥材料正是这样承载的——工具会标注出来,并可就地展开。不会上传任何内容;这一点在这里很重要,因为这类数据是密钥的次数不亚于是证书。
证书扩展和密钥材料会把另一个结构嵌在字符串里,此选项将其就地展开。
全部在浏览器中解码,不会发送到任何地方;不过私钥仍建议用本地工具查看。
粘贴 PEM 块、base64 或 hex 即可解码。
使用方法
- 粘贴 PEM 块、base64 或 hex,或拖入 .der 文件。
- 阅读树形结构:偏移量、头部长度、内容长度、标签和取值。
- 打开展开选项,即可看到藏在 OCTET 和 BIT STRING 里的 DER。
- 留意剩余字节提示:那说明文件中不止一个结构。
- 若要与其他工具的输出对照,可复制整份清单。
常见问题
- 它和证书解码器有什么不同?
- 证书解码器理解 X.509 证书的含义——主体、有效期、备用名称。这个工具只理解编码,所以 CSR、密钥、PKCS#7 包,只要是 DER 都能处理,也因此显示的是偏移量和长度而不是字段名。
- 每行开头的数字是什么?
- 该值在文件中的偏移量,随后是它的头部长度和内容长度。有了这三项,你可以在十六进制转储中定位任何节点;发现某个长度装不进父节点,靠的也是它们。
- 为什么某个 OCTET STRING 被标为“包含 DER”?
- 因为把它的内容当作 DER 解析时恰好用完,这几乎总意味着里面还嵌着另一个结构——证书扩展和密钥材料就是这样承载的。这仍是推测,所以只作标注而不当成定论,是否展开由你决定。
- 不定长度意味着什么?
- 意味着该值不声明自身大小,而是一直延续到内容结束标记为止。BER 允许这样,DER 不允许;在本该是 DER 的东西里看到它,通常就解释了严格解析器为何拒绝该文件。
- 可以粘贴私钥吗?
- 私钥同样是 DER,结构可以解析,而且不会上传。即便如此,私钥还是更适合用本地工具查看——把密钥粘进网页的习惯,早晚会导致泄露。
- 会验证这些值吗?
- 不会。这个工具读的是编码而非含义:它不校验签名、证书链或有效期,只告诉你这些字节说了什么。
相关工具
MessagePack 解码器
粘贴 base64 或 hex 的 MessagePack 字节,在浏览器中读出取值——类型、嵌套映射、二进制块与时间戳。
JWT 解码器
解码 JSON Web Token,查看其头部、声明和过期时间。
Protobuf 解码器(无需 .proto)
粘贴 base64 或 hex 的 protobuf 字节,无需 schema 即可读出字段编号、wire 类型、嵌套消息、字符串和 packed 数组。
Base64 编码 / 解码
即时将文本编码为 Base64,或将 Base64 解码为文本。
Quoted-Printable 编码与解码
将文本编码为 MIME Quoted-Printable(RFC 2045)或解码 — 处理 =XX 转义、软换行与 UTF-8 — 全部在浏览器内完成,编码时按 76 字符换行。
URL 编码 / 解码
将文本按百分号编码用于网址,或将编码的网址解码为文本。