OpenSSL base64 解码 - BIO_read 返回 0

tre*_*nki 3 c++ base64 openssl

我使用下面的代码,其中我使用内存缓冲区中的 BIO_read 进行 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;
}
Run Code Online (Sandbox Code Playgroud)

小智 5

我在 base64 解码方面遇到了类似的问题,直到我明白 base64 是否可以用换行符进行格式化。

您应该尝试通过删除换行符然后BIO_FLAGS_BASE64_NO_NL在 b64 BIO 上设置 OpenSSL标志来标准化您的输入(请参阅有关 b64 BIO的OpenSSL 文档)。