首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python解码ASN1

用Python解码ASN1
EN

Stack Overflow用户
提问于 2016-09-09 17:31:15
回答 2查看 4K关注 0票数 0

我需要使用python解码ASN1消息。我查看了pyasn1库,但它不支持UPER。我能用什么来解码python中的ASN1 UPER

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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质量‘,但对于一个简单的模式,它可能是足够的。当然值得一看。

票数 1
EN

Stack Overflow用户

发布于 2017-10-08 09:28:37

package asn1tools实现了未对齐打包编码规则(UPER)。它支持大多数ASN.1类型及其约束。

下面是一个示例,说明如何使用包编译一个名为foo.asn的规范,然后使用它对问题类型进行编码和解码:

代码语言:javascript
复制
>>> 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}
>>> 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39416902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档