使用pyasn1进行BER解码时Tag的顺序是否重要

时间:2012-12-10 10:53:12

标签: python-2.7 asn.1

案例: - 我需要使用pyasn1解码BER编码数据,但标签的顺序可能会有所不同。因此,在解码数据时会出现错误。 Tag的顺序是否真的很重要,即使它是可选的Tag?

注意: - (案例1)一个CDR中的8个不同标签按顺序排列:AF 30 81 82 83 84 85 86

     (case2)Another 8 Tags is in order : AF 30 81 83 84 85 86 82

但我需要用单解码结构解码两个顺序,这可能吗?

这里给我的结构供参考....

class ChangeOfCharCondition(univ.Sequence):

componentType = namedtype.NamedTypes(

namedtype.OptionalNamedType('Requested', univ.OctetString().subtype(
    implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))

namedtype.OptionalNamedType('Negotiated', univ.OctetString().subtype(
    implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),

namedtype.OptionalNamedType('Uplink', univ.Integer().subtype(
    implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))),

namedtype.OptionalNamedType('Downlink', univ.Integer().subtype(
    implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))),

namedtype.NamedType('changeCondition', univ.Integer().subtype(
    implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 5))),

namedtype.NamedType('changeTime', univ.OctetString().subtype(
    implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 6)))
    )

class TrafficVolumes(univ.SequenceOf):

tagSet = baseTagSet = tag.initTagSet(tag.Tag(tag.tagClassContext,
                                             tag.tagFormatSimple, 15))

componentType = ChangeOfCharCondition()

class Cdr(univ.Set):

tagSet = baseTagSet = tag.initTagSet(tag.Tag(tag.tagClassContext,
                                             tag.tagFormatSimple, 20))
componentType = namedtype.NamedTypes(
namedtype.OptionalNamedType('TrafficVolumes', TrafficVolumes().subtype(
    implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 15))))

示例数据(案例1) - bytearray('\ xaf200 \ x81 \ x0c \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ X82 \ x0cx01 \ x12Q \ x1fs \ x96HHv \ XFA \ XFF \ XFF \ X83 \ X01 \ X00 \ X84 \ X01 \ X00 \ X85 \ X01 \ X02 \ 86 \吨\ X12 \ X12 \ X10 \ X12 \ x00P + \ X050' )它工作正常

示例数据(案例2) - bytearray('\ xaf200 \ x81 \ x0c \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ X83 \ X01 \ X00 \ X84 \ X01 \ X00 \ X85 \ X01 \ X02 \ 86 \吨\ X12 \ X12 \ X10 \ X12 \ x00P + \ X050 \ X82 \ x0cx01 \ x12Q \ x1fs \ x96HHv \ XFA \ XFF \ XFF” )在这种情况下它会引发错误,如, PyAsn1Error:TagSet(Tag(tagClass = 128,tagFormat = 0,tagId = 2))不在asn1Spec中:无'

0 个答案:

没有答案