如何打印OpenSSL RSA密钥的内容

时间:2014-05-05 07:43:07

标签: c++ openssl rsa

我想打印使用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(第六行)时我得到分段错误。有人能发现错误吗?

1 个答案:

答案 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++?