如何使用BER编码规则编码时使用通用标记表示ASN.1值?

时间:2017-12-10 12:29:06

标签: asn.1

根据http://asn1-playground.oss.com/,使用以下ASN.1架构

Test DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
    A ::= SEQUENCE {
      int INTEGER,
      seq SEQUENCE { int INTEGER, bool BOOLEAN },
      u UTF8String
    }  
END

以下值(采用ASN.1值表示法格式)

a A ::= 
{  
    int 1,
    seq { int 2, bool TRUE },
    u "ABC"
}

使用BER编码规则

以下面的18个字节表示
30   10
    80   01   01
    A1   06  
        80   01   02
        81   01   FF
    82   03   414243

which is parsed by CyberChef into the following ASN.1 tree

SEQUENCE
  [0] 01
  [1]
    [0] 02
    [1] FF
  [2] 414243

因此似乎该值用应用程序标签表示。您能否帮助评论是否以及如何使用通用标记将值转换为以下18个字节

30   10
    02   01   01
    30   06  
        02   01   02
        01   01   FF
    0C   03   414243    

which would give the following better ASN.1 tree when parsed by CyberChef

SEQUENCE
  INTEGER 01..(total 1bytes)..01
  SEQUENCE
    INTEGER 02..(total 1bytes)..02
    BOOLEAN TRUE
  UNKNOWN(0C) 414243

非常感谢您的努力!

1 个答案:

答案 0 :(得分:0)

似乎原因是" AUTOMATIC TAGS"在模块的开头使用,为所有SEQUENCE,SET和CHOICE类型的组件强制执行上下文特定的标记。该值可以使用通用标记if "AUTOMATIC" is changed to "EXPLICIT"

表示