Правильно ли я base64-кодирует буфер с OpenSSL? - PullRequest
4 голосов
/ 19 декабря 2011

У меня есть этот буфер:

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 голос
/ 26 декабря 2011

// * Вы должны поместить ваш BIO_write() в цикл.Страница man об этом довольно ясно (она пытается записать запрошенное количество байтов), и это согласуется с другими вещами записи в C.

// ** Вы должны использовать char *, так как эточто указывает страница руководства, хотя я не уверен, что это большое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...