OpenSSL base64解码-BIO_read返回0
OpenSSL base64 decoding - BIO_read returns 0
我使用下面的代码,其中我使用内存缓冲区中的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, "Problemn");
result.resize(size);
BIO_free_all(bmem);
return result;
}
我在base64解码时也遇到过类似的问题,直到我明白base64是否可以用换行符格式化。
您应该尝试通过删除换行符,然后在b64 BIO上设置OpenSSL BIO_FLAGS_BASE64_NO_NL
标志来规范化输入(请参阅b64 BIO上的OpenSSL文档)。
BIO_read
在传递base64url
编码字符串的情况下返回0。而且,base64url格式似乎不受OpenSSL的支持。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- std::ifstream.read() 不会向我的缓冲区返回任何内容
- 套接字 read() 函数在处理隧道时有时从不返回 0
- C++ 套接字 read() 有时在连接到服务器时返回 -1
- ifstream::read 不断返回不正确的值
- read() 从命令行返回 EISDIR 错误
- C++ read() 返回未格式化的二进制数据
- ifstream Read 和 Fread 不返回相同的数据,C++
- read()返回在某些系统上读取的错误字节数
- c++服务器,Java InputStreamReader.read不能返回-1,BufferedReader不返回值
- Ifstream::read总是返回不正确的值
- Boost read()永远不会返回,即使在服务器上执行写(ssl) Boost
- TCP套接字上的read()何时返回?
- 等效于 VB DLL 函数声明的 C# 返回并返回'Attempted to read or write protected memory'错误
- int* const* foo(int x);是一个有效的 C 函数原型。您如何"read"此返回类型?