我是否正确使用OpenSSL对缓冲区进行Base64编码?

4

我有一个给定的缓冲区:

unsigned char *buffer; 
int buffer_length; 

这是我目前将其转换为base64编码缓冲区的方法:
BIO *mem = BIO_new(BIO_s_mem()); 
BIO *b64 = BIO_new(BIO_f_base64()); 
mem = BIO_push(b64, mem); 

int write_length = BIO_write(mem, buffer, buffer_length); 
if (write_length != buffer_length) //* 
  return -1; 

int flush_result = BIO_flush(mem); 
if (flush_result != 1) 
  return -1; 

unsigned char *result; //** 
int result_length = BIO_get_mem_data(mem, &result); 

//use the base64-encoded result to do whatever I need to do 

BIO_free_all(mem); 
return 0;

目前看来,这似乎是有效的。但是,这是好的和健壮的代码吗?我对上面用星号标记的代码片段有特别的问题:

  • (//*) 是否正确地假设 BIO_write() 总是一次性写出整个 base64 编码字符串,还是我必须在这里创建一个循环?
  • (//**) 使用类型 unsigned char* 是正确的,还是必须使用 char *
1个回答

1

//* 你应该将你的 BIO_write() 放在一个循环中。手册已经非常清楚地说明了这一点(它试图写入请求的字节数),这与 C 中的其他写入操作是一致的。

//** 你应该使用 char *,因为这是手册指定的,尽管我不确定这是否很重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接