0

我在 openssl 的页面上没有找到关于如何使用 ASN1_ENUMERATED 的文档。

使用 BERViewer 可视化结构:
在此处输入图像描述

所以我用:

ASN1_SEQUENCE_ANY *asn1SequenceAny = sk_ASN1_TYPE_new_null();
asn1SequenceAny = d2i_ASN1_SEQUENCE_ANY(&asn1SequenceAny, (const unsigned char**)&data,len);

ASN1_TYPE *asn1Type = NULL;
asn1Type = sk_ASN1_TYPE_pop(asn1SequenceAny);
if(asn1Type->type == V_ASN1_ENUMERATED)
{
    asn1Type->value.enumerated->data; // How to get sequence inside [0] ?
}

磁盘“asn1Type->value.enumerated->data”上的枚举数据如下所示:
在此处输入图像描述

如何从 [0] 获取 ASN1_SEQUENCE_ANY:

SEQUENCE
     |__SEQUENCE
     |__SEQUENCE

我试过:ASN1_ENUMERATED_get,返回-1。为什么不是零?

文章非常受欢迎。

4

1 回答 1

0

OpenSSL 提供了许多函数来解码这些消息。您必须知道对其进行编码的相应函数是什么,因为解码例程还解析输出以确保解码的消息与您调用的解码方法所暗示的预期类型相匹配。你似乎想要:

d2i_ASN1_OBJECT (3ssl) - ASN1 OBJECT IDENTIFIER functions

但如果这不正确,您可以搜索 OpenSSL 文档d2i,您会发现很多功能可以尝试。

如果您下载OpenSSL 源代码,解压后,查看apps子目录,并通读asn1pars.c文件。或者,您可以点击此链接在线查看。希望这可以帮助!

于 2012-06-12T15:37:41.190 回答