你好,我想让我的函数从RSA中编写一个pem文件。
void write_privatekey(RSA *rsa, BIO *keybio)
{
EVP_PKEY *pkey;
BIO *bio_private;
pkey = PEM_read_bio_PrivateKey(keybio, &pkey, 0, 0);
bio_private = BIO_new_file("private_new.pem", "w+");
PEM_write_bio_PrivateKey(bio_private, pkey, NULL, NULL, 0, NULL, NULL);
}
但是当我试着运行这个代码时,它会破坏
[1] 48767 segmentation fault ./corsair public.key
OpenSSL API并不是最直观的使用方法。然而,这对您来说应该是一个巨大的警告信号,您将指向pkey
的指针传递给了PEM_read_bio_PrivateKey
,并将其返回值分配给了它
如果你看一下参考手册,建议的小节是
key = PEM_read_bio_PrivateKey(bp, NULL, pass_cb, …);
if( key == NULL ){
/* Error */
}
您截取的代码缺少以下几点:它不提供密码短语回调,也不执行错误检查。你绝对必须同时做这两件事。
在扰乱OpenSSL库之后。并学会了深入研究it文档的方法。这里是从RSA对象写入PEM文件的答案。
BIO*BIO_private;
bio_private = BIO_new_file("private_new.pem", "w+");
PEM_write_bio_RSAPrivateKey(bio_private, rsa, 0, 0, 0, 0, 0);