如何将ASN1_TIME转换为std :: string

时间:2017-03-23 10:13:54

标签: c++ openssl

我正在以这种方式将ASN1_TIME转换为std :: string:

std::string timeString;
BIO *bmem = BIO_new(BIO_s_mem());

if (ASN1_TIME_print(bmem, asn1Time)) {
    BUF_MEM * bptr;

    BIO_get_mem_ptr(bmem, &bptr);
    timeString.assign(std::string(bptr->data, bptr->length));
}
else { // Log error
}
BIO_free_all(bmem);

使用BUF_MEM有什么问题?我在bptr->长度中得到非常大的数字,导致std :: string构造中出现异常。

1 个答案:

答案 0 :(得分:0)

有问题的代码很好。问题是由于标题不匹配造成的。 系统的早期标题正在使用,因此一切都很好。由于(最有可能)El-Capitan,OSX不再包含依赖OSX for SSL的标题和劝阻,以避免由于版本不兼容而导致的问题。

请参阅http://lists.apple.com/archives/macnetworkprog/2015/Jun/msg00025.html

这正是发生的事情 - 代码在操作系统上与库链接但是使用的标题来自不同版本,因为它们是从openssl最新源下载的。