OpenSSL base64解码 - BIO_read返回0

时间:2012-08-24 13:03:46

标签: c++ openssl base64

我使用下面的代码,我在内存缓冲区中使用BIO_read进行base64解码。有时BIO_read会返回0作为size参数。我还不知道为什么会发生这种情况。任何想法?

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;
}

2 个答案:

答案 0 :(得分:4)

我遇到类似base64解码的问题,直到我明白base64可以用换行格式化。

您应该尝试通过删除换行符然后在b64 BIO上设置OpenSSL BIO_FLAGS_BASE64_NO_NL标记来规范化输入(请参阅b64 BIO上的OpenSSL documentation)。

答案 1 :(得分:0)

如果您传递BIO_read编码的字符串,

base64url将返回0。看来OpenSSL不支持base64url格式。