gpt4 book ai didi

c++ - 如何打印 OpenSSL RSA key 的内容

转载 作者:行者123 更新时间:2023-11-30 02:46:32 24 4
gpt4 key购买 nike

我想打印使用 OpenSSL 创建并通过指针访问的 RSA key 的内容

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++ 智能指针中的好方法,如下所示:How to properly print RSA* as string in C++? .

关于c++ - 如何打印 OpenSSL RSA key 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23467352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com