我想打印使用OpenSSL创建并通过指针访问的RSA密钥的内容
RSA * rsa;
现在,我尝试使用RSA_print和BIO_read函数,如下所示:
BIO * keybio ;
RSA_print(keybio, rsa, 0);
char buffer [1024];
std::string res = "";
while (BIO_read (keybio, buffer, 1023) > 0)
{
std::cout << buffer;
}
但是在第一次执行BIO_read(第六行)时我得到分段错误。有人能发现错误吗?
答案 0 :(得分:3)
我认为你正在写未分配的内存。我不认为RSA_print()
为BIO
分配内存,所以你将一个未初始化的指针传递给它。
编辑:正如@jww在评论中指出的那样,BIO
对象应该用一组专用选项进行实例化。我相应地编辑了答案。我还改变了传递给1024
的缓冲区大小。
分配空间:
BIO * keybio = BIO_new(BIO_s_mem());
RSA_print(keybio, rsa, 0);
char buffer [1024];
std::string res = "";
while (BIO_read (keybio, buffer, 1024) > 0)
{
std::cout << buffer;
}
BIO_free(keybio); //appropriate free "method"
BIO_s_mem()
创建了一个内存BIO
方法函数。 BIO_new()
使用提供的方法创建并初始化对象本身。
另请注意,此代码为c
- 样式。有一种很好的方法可以将纯指针包装到c++
智能指针中,如下所示:How to properly print RSA* as string in C++?。