首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从pyasn1对象中恢复基板?

如何从pyasn1对象中恢复基板?
EN

Stack Overflow用户
提问于 2018-05-11 19:27:02
回答 1查看 257关注 0票数 0

我有一个复杂的嵌套ASN.1结构作为字节。我想在这个结构中找到所有的T61Strings (比方说),在原始字节编码中找到。这在pyasn1中是可能的吗?

到目前为止,我只知道如何在BER解码的Python对象中定位T61Strings (或其他什么)。我可以重新编码每一个,但不能保证重新编码的值将匹配原件。这里有一些密码,因此对这些字节值很挑剔。

如果我能只做decoded_object.get_substrate()或者类似的事情,我就会被分类。

有什么想法?谢谢。

更新:的回答似乎很好。

代码语言:javascript
复制
In [61]: class X(pyasn1.codec.ber.decoder.Decoder):
    ...:     def __call__(self,*v,**kw):
    ...:         parsed,remainder = pyasn1.codec.ber.decoder.Decoder.__call__(self,*v,**kw)
    ...:         parsed._substrate = v[0][:len(v[0])-len(remainder)]
    ...:         return parsed,remainder
    ...:     

In [62]: decode = X(pyasn1.codec.ber.decoder.tagMap,pyasn1.codec.ber.decoder.typeMap)

In [63]: tmp = decode(b'\x30\x05\x02\x01\x7f\x05\x00')[0]

In [64]: tmp._substrate.encode('hex')
Out[64]: '300502017f0500'

In [65]: tmp[0]._substrate.encode('hex')
Out[65]: '02017f'

In [66]: tmp[1]._substrate.encode('hex')
Out[66]: '0500'

In [67]: 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-11 21:37:22

是误伤,不是德尔吗?密码应用程序倾向于使用DER,因为它是稳定的。如果是这样,你应该能够安全地重新编码一旦解码的项目,并得到相同的结果。

在pyasn1中没有内置特性允许您将衬底片段与解码对象进行匹配。但是,您可能可以通过重写()方法并注意其substrate + length参数来模拟这一点,以查看正在解码的内容以及重写的__call__()方法的返回值,该方法是从所观察到的基板生成的对象。

请记住,解码过程是递归的,因此您将看到终端(标量)和容器对象包含许多其他对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50299018

复制
相关文章

相似问题

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