我需要使用python解码ASN1消息。我查看了pyasn1库,但它不支持UPER。我能用什么来解码python中的ASN1 UPER
发布于 2016-09-10 11:56:34
得到了模式?
假设您有要解码的数据的ASN.1模式,您可以从查看来自欧洲航天局的味觉框架开始。这是一个基于ASN.1的航天器系统大型应用开发框架。
该框架与您和您的需求无关。但是,它的核心是一个支持Python代码生成和uPER的ASN.1模式编译器。您最好先尝试一下他们预先构建的VM映像,该映像为您提供了一个linux,它已经安装了所有内容:请看这里。您可以使用它将模式编译成python源代码,然后将uPER数据从/解码到Python类。另外,您也可以对C、C++、C#、Java、ADA做同样的操作。
我自己也没有很生气地尝试过,但是有很多欧空局的宇宙飞船都是用它来飞行的,所以一切都很可能没问题。
没有模式?
如果您没有模式,那么您就会遇到一些问题。没有架构文件,uPER无法解码。这是因为uPER数据已被充分打包,几乎没有数据结构的证据。您将不得不猜测模式可能是什么,尝试解码,看看它是否适用于所有的数据,如果不是,再试一次。
如果已知它是每个编码的戛纳,那么您可以在不使用模式的情况下对其进行解码,但这仍然是一项很大的工作。
这与BER编码数据形成了鲜明的对比,BER编码数据通过包含每个编码PDU字段的标记、类型和值信息来保留数据结构的细节。但是,误码率编码的数据要比每个数据大得多,因此它不用于无线电系统或其他带宽受限的传输信道。
==EDIT==
刚才看了一下味觉,我现在不确定它是否生成了Python代码。Python是框架的依赖项,但它并没有声称它生成Python代码。看起来只是C/C++或ADA。
无论如何,ASN.1编译器似乎以在GITHUB上告终。这将生成C代码(和ADA,哇!),您可以从Python中以某种方式调用这些代码。它不会那么整洁,但还是比什么都没有好。
注释这个编译器在编译什么模式时受到限制(它需要数组上的大小约束,等等,大概是以静态大小的对象结束)。
您最好的选择可能是调用由其他ASN.1编译器生成的C、C++或C#代码--在目标系统和OSS Nokalva上有商业代码。
==Yet另一个Edit==
此页谈到Python,ASN.1 uPER。
==Encore un Edit==
PyASN1页面引用asn1ate,它是Python的代码生成器。据报道,它是'alpha质量‘,但对于一个简单的模式,它可能是足够的。当然值得一看。
发布于 2017-10-08 09:28:37
package asn1tools实现了未对齐打包编码规则(UPER)。它支持大多数ASN.1类型及其约束。
下面是一个示例,说明如何使用包编译一个名为foo.asn的规范,然后使用它对问题类型进行编码和解码:
>>> import asn1tools
>>> foo = asn1tools.compile_file('tests/files/foo.asn', 'uper')
>>> encoded = foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'})
>>> encoded
bytearray(b'\x01\x01\t\x93\xcd\x03\x15l^\xb3~')
>>> foo.decode('Question', encoded)
{'question': u'Is 1+1=3?', 'id': 1}
>>> https://stackoverflow.com/questions/39416902
复制相似问题