我使用下面的代码,我在内存缓冲区中使用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;
}
答案 0 :(得分:4)
我遇到类似base64解码的问题,直到我明白base64可以用换行格式化。
您应该尝试通过删除换行符然后在b64 BIO上设置OpenSSL BIO_FLAGS_BASE64_NO_NL
标记来规范化输入(请参阅b64 BIO上的OpenSSL documentation)。
答案 1 :(得分:0)
BIO_read
编码的字符串, base64url
将返回0。看来OpenSSL不支持base64url格式。