C++ 如何将DER/BER序列化/去序列化为可导航结构C/C++;?

C++ 如何将DER/BER序列化/去序列化为可导航结构C/C++;?,c++,c,openssl,der,asn1,C++,C,Openssl,Der,Asn1,在C/C++中,是否有人知道可以将未知的DER序列化到可以导航的结构中 例如: 说我拿到了订单 Hello ::= SEQUENCE { myInt INTEGER, myBool BOOLEAN, myStr UTF8String } 作为一种编码。我希望能够将这个序列解析成一个C结构,在这里我可以导航。即 unsigned char *myDer = { 0x30, ..., 0x02, 0x01,0x12, ... }; AsnObj obj(myDer); AsnOb

在C/C++中,是否有人知道可以将未知的DER序列化到可以导航的结构中

例如:

说我拿到了订单

Hello ::= SEQUENCE {
   myInt INTEGER,
   myBool BOOLEAN,
   myStr UTF8String
}
作为一种编码。我希望能够将这个序列解析成一个C结构,在这里我可以导航。即

unsigned char *myDer = { 0x30, ..., 0x02, 0x01,0x12, ... };
AsnObj obj(myDer);
AsnObj *children = obj.getChildren();
for(int i=0;i<children->size();++i) {
   AsnObj child = children.getChild(i);
   /* Do something with this child */
}
无符号字符*myDer={0x30,…,0x02,0x01,0x12,…};
AsnObj obj(myDer);
AsnObj*children=obj.getChildren();
对于(int i=0;isize();++i){
AsnObj child=children.getChild(i);
/*对这个孩子做点什么*/
}
我看过各种工具,比如asn1编译器,但这似乎是假设您知道结构是什么

我也看了snacc,但我很难用它来编译任何东西,并且再次显得有点迟钝。我认为ffasn1c可以工作,但它需要一个我无法获得的许可证

我知道OpenSSL必须做类似的事情,比如
d2i_X509
,但这是假设它是一个X509,而不是。在OpenSSL上是否有一种方法可以让您在DER上进行解析和迭代

非常感谢您的帮助


Calum

\“…知道任何C/C++库…”*-请求库和工具建议是本网站的主题之外的内容。我没有用过它,但相信它允许这样的问题。简单的问题改变,希望能使其符合指导原则。ASN.1是非常基本的,你可以自己动手。根据我(相当老)的经验,你会为一个商业图书馆付出很多,所以这就是我们最终要做的。“…知道任何C/C++图书馆…”*-对于这个网站来说,图书馆和工具建议的请求都是无关紧要的。我没有用过它,但相信它允许这样的问题。简单的问题改变,希望能使其符合指导原则。ASN.1是非常基本的,你可以自己动手。根据我(相当老的)经验,你会为一个商业图书馆付出很多,所以这就是我们最终要做的。