ASN.1 类型 0x80
ASN.1 type 0x80
我的 ASN.1 解码器工作正常,直到我遇到一个有趣的类型:
0x80
被在线工具解码为名称为 [0]
.
的简单类型
我发现一些消息来源提到这是 "indefinite length",但它肯定有一个我可以阅读的确定长度。这种类型到底是什么,还有其他类似的类型吗?
作为标签,0x80
(在 BER、CER 或 DER 下)表示其 class 是上下文特定的标签(相对于命名的 classes,UNIVERSAL
、PRIVATE
和 APPLICATION
),其编号为 0
,其编码是原始的。它是原始的这一事实意味着它被用作 IMPLICIT
标签。如果它是 0xA0
(构造的,特定于上下文的 0),它可以是 EXPLICIT
标记(包装器)或 IMPLICIT
构造值(SEQUENCE
、SEQUENCE-OF
, 等等).
要了解此类值的含义,需要查看 ASN.1 类型定义。
例如,来自 RFC 3280 A.2 (DEFINITIONS IMPLICIT TAGS
):
PrivateKeyUsagePeriod ::= SEQUENCE {
notBefore [0] GeneralizedTime OPTIONAL,
notAfter [1] GeneralizedTime OPTIONAL }
如果 PrivateKeyUsagePeriod
有一个 notBefore
值,那么它将被标记为 0x80
([0]
) 而不是 0x18
([UNIVERSAL 24]
);但仍应按照 GeneralizedTime
.
的编码进行解释
我的 ASN.1 解码器工作正常,直到我遇到一个有趣的类型:
0x80
被在线工具解码为名称为 [0]
.
我发现一些消息来源提到这是 "indefinite length",但它肯定有一个我可以阅读的确定长度。这种类型到底是什么,还有其他类似的类型吗?
作为标签,0x80
(在 BER、CER 或 DER 下)表示其 class 是上下文特定的标签(相对于命名的 classes,UNIVERSAL
、PRIVATE
和 APPLICATION
),其编号为 0
,其编码是原始的。它是原始的这一事实意味着它被用作 IMPLICIT
标签。如果它是 0xA0
(构造的,特定于上下文的 0),它可以是 EXPLICIT
标记(包装器)或 IMPLICIT
构造值(SEQUENCE
、SEQUENCE-OF
, 等等).
要了解此类值的含义,需要查看 ASN.1 类型定义。
例如,来自 RFC 3280 A.2 (DEFINITIONS IMPLICIT TAGS
):
PrivateKeyUsagePeriod ::= SEQUENCE {
notBefore [0] GeneralizedTime OPTIONAL,
notAfter [1] GeneralizedTime OPTIONAL }
如果 PrivateKeyUsagePeriod
有一个 notBefore
值,那么它将被标记为 0x80
([0]
) 而不是 0x18
([UNIVERSAL 24]
);但仍应按照 GeneralizedTime
.