【问题标题】:ASN.1 type 0x80ASN.1 类型 0x80
【发布时间】:2018-08-27 10:59:13
【问题描述】:

我的 ASN.1 解码器工作正常,直到我遇到了一个有趣的类型:

0x80被在线工具解码为简单类型,名称为[0]

我发现一些消息来源提到这是“不确定长度”,但它肯定有一个我可以阅读的确定长度。这种类型究竟是什么,还有其他类似的类型吗?

【问题讨论】:

  • 这取决于0x80 在 TLV 结构中的位置。如果这个值出现在类型(标签)中,它就是类型选择器(选择)。如果该值以长度表示,则表示长度不定。你能澄清一下吗?
  • @Crypt32 是的,它是一个类型(标签),如果我不清楚很抱歉
  • 那么这是没有外部类型的隐式类型选择器(选择),底层数据类型是简单类型。
  • @Crypt32 是in this answer所描述的吗?

标签: asn.1


【解决方案1】:

作为标签,0x80(在 BER、CER 或 DER 下)表示其类是特定于上下文的标签(与命名类相比,UNIVERSALPRIVATEAPPLICATION),其编号是0,其编码是原始的。它是原始的事实意味着它被用作IMPLICIT 标签。如果它是 0xA0(构造的,上下文特定的 0),它可以是 EXPLICIT 标记(包装器)或 IMPLICIT 构造的值(SEQUENCESEQUENCE-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 的编码进行解释。

【讨论】:

  • 谢谢。只是为了澄清“数字为 0”的部分 - 这是否意味着 [1] 将是 0x81?
  • @karolyzz 是的。 X.690 8.1.2 节(“标识符八位字节”)
猜你喜欢
  • 1970-01-01
  • 2015-12-10
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 2011-08-30
相关资源
最近更新 更多