1

情况如下,我有一个 BER 编码(十六进制)文件,我想按照 BER 解码规则对数据进行解码。能够使用 "pyasn1" 解码大多数标签,但无法解码特殊标签,例如:9F 1F使用此规则。

我如何解码没有错误?
提示:它是数据的“OctetString”表示。

示例代码

class MYData(univ.Set):
     tagSet = baseTagSet = tag.initTagSet(tag.Tag(tag.tagClassContext,
                                          tag.tagFormatSimple, 21))
     componentType = namedtype.NamedTypes(
         namedtype.OptionalNamedType('SampleField', univ.OctetString().subtype(
         implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 31)))
     )

那么,如何表示9F1F使用 pyasn1 的 typeID 呢?

4

2 回答 2

1

我可以通过以下安排解码您的基板:

from pyasn1.type import univ, tag
from pyasn1.codec.ber import decoder
from pyasn1 import debug

debug.setLogger(debug.Debug('all'))

firstItem = univ.OctetString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 31))
secondItem = univ.OctetString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 32))

substrate = '\x9f\x1f\x02"\x00\x9f \x08\x01\x04\xf4\x17\x0c\xf0\x8a-'
i1, substrate = decoder.decode(substrate, asn1Spec=firstItem)
print i1.prettyPrint()

i2, substrate = decoder.decode(substrate, asn1Spec=secondItem)
print i2.prettyPrint()

也就是说,它看起来像是两个项目的串联,而不是类似记录的结构。

于 2012-11-24T09:28:40.657 回答
0

您的代码按原样为我工作。9F 1F 标签看起来太大而无法放入单个八位字节,因此它编码为两个。由于它是一个隐式标签,它会替换原始标签。除此之外,我看不出它有什么特别之处。

无论如何,这是我的 Python 控制台:

>>> class MYData(univ.Set):
...      tagSet = baseTagSet = tag.initTagSet(tag.Tag(tag.tagClassContext,
...                                           tag.tagFormatSimple, 21))
...      componentType = namedtype.NamedTypes(
...          namedtype.OptionalNamedType('SampleField', univ.OctetString().subtype(
...          implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 31)))
...      )
>>> myData = MYData()
>>> myData['SampleField'] = 'A'
>>> print myData.prettyPrint()
MYData:
 SampleField=A
>>>
>>> encoder.encode(myData)
'\xb5\x04\x9f\x1f\x01A'
>>> v, _ = decoder.decode('\xb5\x04\x9f\x1f\x01A', asn1Spec=myData)
>>> print v.prettyPrint()
MYData:
 SampleField=A

我正在使用取自此处的最新 pyasn1 版本。请澄清究竟是什么不按预期工作?

于 2012-11-22T16:05:04.043 回答