Encoding 我对ASN1 der的解释哪里错了?

Encoding 我对ASN1 der的解释哪里错了?,encoding,openssl,cryptography,der,pyasn1,Encoding,Openssl,Cryptography,Der,Pyasn1,我的结构如下所示: SET OF SEQUENCE: INTEGER: XX INTEGER: YY 我的编码如下所示: 11 08 10 06 02 01 XX 02 01 YY 11 08 -- SET OF 10 06 -- SEQUENCE 然而,当我用openssl解码时,我看不到预期的输出。看起来像 0:d=0 hl=2 l= 8 prim: SET 0000 - 10 06 02

我的结构如下所示:

 SET OF
  SEQUENCE:
     INTEGER: XX
     INTEGER: YY
我的编码如下所示:

11 08 10 06 02 01 XX 02 01 YY        

11 08 -- SET OF
10 06 -- SEQUENCE 
然而,当我用openssl解码时,我看不到预期的输出。看起来像

  0:d=0  hl=2 l=   8 prim: SET               
      0000 - 10 06 02 01 XX 02 01 YY-  
这不是我期望看到的。(看看我想要的结构)

我不确定我错过了什么。任何帮助都将不胜感激。

集合和序列是构造的类型。这意味着需要设置指示标记中构造类型的位。这将是位5或6(取决于从位0或1开始)。如果未设置该位,则解析器将其视为基元类型,这意味着它只有一个值而不是子值。这就是为什么输出中会出现
prim
。标记号仍然是17或16,表示一组或序列,因此结构仍然被视为一组


因此,应该使用值
31
30,而不是
11
10
。然后您的代码应该能够正确解析。

@erickson非常感谢您的帮助和专业知识。请注意,有ASN.1编辑器,您可以使用它构建具有良好GUI界面的BER结构。您可以使用它们来创建一些测试结构。“ASN.1编辑器”只是其中之一。我正试图为整数编写自己的小编码器。但我不明白的是,在什么情况下,人们会使用11或10?基本上不会。原始位和标记号的组合没有意义。但是,您可以拆分一些基本类型,例如八位字符串。所以标签24可能有意义。。。