【发布时间】:2010-04-01 12:11:17
【问题描述】:
我正在使用 openssl BIO 对象将二进制字符串转换为 base64 字符串。代码如下:
void ToBase64(std::string & s_in) {
BIO * b_s = BIO_new( BIO_s_mem() );
BIO * b64_f = BIO_new( BIO_f_base64() );
b_s = BIO_push( b64_f , b_s);
std::cout << "IN::" << s_in.length();
BIO_write(b_s, s_in.c_str(), s_in.length());
char * pp;
int sz = BIO_get_mem_data(b_s, &pp);
std::cout << "OUT::" << sz << endl;
s_in.assign(pp,sz);
//std::cout << sz << " " << std::string(pp,sz) << std::endl;
BIO_free (b64_f); // TODO ret error potential
BIO_free (b_s); //
}
长度为 64 或 72。但输出始终为 65,这是不正确的,它应该比这大得多。该文档不是世界上最好的,AFAIK bio_s_mem 对象应该动态增长。我究竟做错了什么 ?
我可能最好找到一个不提供流支持且支持 base64 转换的自包含 C++ 类。流媒体支持不适合我的应用程序。但是我只是想坚持使用 openSSL,因为我已经依赖于一些加密例程。无论如何,我会在分析后做出这样的决定。
【问题讨论】:
标签: c++ c open-source openssl