介绍如何打印OpenSSL RSA密钥的内容

How to print the content of an OpenSSL RSA key

本文关键字:RSA OpenSSL 密钥 打印 何打印      更新时间:2023-10-16

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

我认为你在写未分配的内存。我不认为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++智能指针的好方法,如下所示:如何在c++中正确地将RSA*打印为字符串?