2012-08-24 109 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)来标准化您的输入。