2011-12-19 66 views
4

我有這樣的緩衝式給出:我是否正確使用OpenSSL對base64進行編碼?

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

// *你應該把你的BIO_write()放在一個循環中。手冊頁非常清楚(它試圖寫出所需的字節數),並且與C中的其他寫入內容一致。

// **您應該使用char *,因爲這是手冊頁指定,雖然我不知道這是一個大問題。

相關問題