2012-08-24 110 views
2

我使用下面的代碼從內存緩衝區中使用BIO_read來執行base64解碼。有時BIO_read返回0大小參數。我還無法弄清楚爲什麼會發生這種情況。有任何想法嗎?OpenSSL base64解碼 - BIO_read返回0

static std::vector<unsigned char> base64_decode(void *input, int length) 
{ 
    std::vector<unsigned char> result(length, 0); 
    BIO *b64, *bmem; 

    b64 = BIO_new(BIO_f_base64()); 
    bmem = BIO_new_mem_buf(input, length); 
    bmem = BIO_push(b64, bmem); 

    int size = BIO_read(bmem, &result[0], length); 
    if (size == 0) 
     fprintf(stderr, "Problem\n"); 
    result.resize(size); 

    BIO_free_all(bmem); 

    return result; 
} 
+1

當你遇到這個問題時,你需要調用什麼參數? –

回答

4

我不得不使用Base64解碼類似的問題,直到我明白的base64可以用換行或不進行格式化。

您應該嘗試通過刪除換行符並在您的b64 BIO上設置OpenSSL BIO_FLAGS_BASE64_NO_NL標誌(請參閱b64 BIO上的OpenSSL documentation)來標準化您的輸入。