我有一个BER结构是这样的...解释ASN.1不定lenght编码与多个封装八位字节串
$ openssl asn1parse -inform der -in test.der -i -dump
????:d=4 hl=2 l=inf cons: cont [ 0 ]
????:d=5 hl=3 l= 240 prim: OCTET STRING
0000 - AABBCCDD
????:d=5 hl=2 l= 8 prim: OCTET STRING
0000 - EEFF
????:d=5 hl=2 l= 0 prim: EOC
...或der2ascii风格...
[0] `80`
OCTET_STRING { `AABBCCDD` }
OCTET_STRING { `EEFF` }
`0000`
我所知道的:不定长编码必须包含构造类型,因为基本类型可以诠释导致模糊,例如当包含0x0000时。我想知道的是:解析这种BER结构时,解码器如何表现?编码中是否包含两个OCTET STRING的标题字节?如果是,那么无限长字节数据如何编码?当第二个OCTET STRING是例如,应用程序如何解释标记为[0]的TLV字段的值。一个INTEGER?
我在问这个问题,因为在CMS标准中,一个字段被定义为单个OCTET STRING,但在大多数BER编码中,我总是看到其中两个。这只是由于无限长编码?我错过了什么吗?
从ITU-T X.690:
8.1.4内容字节
内容八位位组将包括零个,一个或多个字节,如在 指定应编码的数据值后续条款。
注 - 内容字节取决于数据值的类型;后续条款遵循与ASN.1中 类型的定义相同的顺序。
这是否意味着我可以将每个构造类型和应用程序只解释构造的TLV结构的值部分?
所以,当块是进程时,这些块的头必须被丢弃,对吧?如果组块具有不同的类型,例如这也是定义的。整数?是在任何地方定义生成块的过程? PS:我会将我的问题改为使用BER。我所看到的标准基本上是DER,但有时候允许BER构造... – duesee
更新了答案。 –
太棒了,谢谢! – duesee