我正在寻找有关使用 OpenSSL 库进行 ASN.1 DER 编码的任何 C/C++ 教程、示例代码或文档。
问问题
6185 次
2 回答
5
好吧,正如您在 openssl 网站上看到的那样,没有 ASN.1 函数的官方文档。
但是你总是可以下载 openssl 源代码。解压后,您可以在 doc/crypto 目录文档中看到 ASN.1。
# ~/tmp/openssl-1.0.1c/doc/crypto> ls -1 | grep -i asn
ASN1_generate_nconf.pod
ASN1_OBJECT_new.pod
ASN1_STRING_length.pod
ASN1_STRING_new.pod
ASN1_STRING_print_ex.pod
d2i_ASN1_OBJECT.pod
这些文件是普通的旧文档,我相信可以将其转换为 HTML/PDF。它包含你想要的。
于 2012-08-24T11:08:32.223 回答
3
#include <openssl/asn1.h>
#include <cstdio>
#include <cstring>
void xprint(void *data, int len) {
unsigned char *ptr = reinterpret_cast<unsigned char*>(data);
for (int i = 0; i < len; i++) {
printf("%x ", *ptr);
ptr += 1;
}
printf("\n");
}
void str_test() {
ASN1_STRING asn1str;
const char *s = "stackoverflow save the world!aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
ASN1_STRING_set(&asn1str, s, strlen(s) + 1);
const char *value = reinterpret_cast<char*>(ASN1_STRING_data(&asn1str));
printf("The value is %s, strlen: %zu\n", value, strlen(value));
unsigned char *ptr = new unsigned char[1024];
int ret = M_i2d_ASN1_OCTET_STRING(&asn1str, &ptr);
// int ret = i2d_ASN1_bytes(&asn1str, &ptr, V_ASN1_OCTET_STRING, V_ASN1_UNIVERSAL);
printf("return: %d\n", ret);
xprint(ptr - ret, ret);
}
int main(int argc, char** argv) {
str_test();
return 0;
}
希望这会为您节省一些时间和努力。
http://www.umich.edu/~x509/ssleay/asn1_convert.html这个链接真的很有帮助。
于 2018-07-09T21:29:08.137 回答