OpenSSL base64解码 - BIO_read返回0

3
我使用下面的代码,其中我使用来自内存缓冲区的BIO_read进行base64解码。有时候BIO_read对于size参数返回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
当您遇到该问题时,您使用什么参数调用函数? - David Schwartz
2个回答

6
我曾经遇到与base64解码相关的问题,直到我了解到base64可以包含换行符或不包含才得以解决。
你应该尝试通过移除换行符来规范化输入,然后在b64 BIO上设置OpenSSL的BIO_FLAGS_BASE64_NO_NL标志(请参阅关于b64 BIO的OpenSSL文档).

0

BIO_read在传递base64url编码的字符串时返回0。而且似乎OpenSSL不支持base64url格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接