用C编写PEM-RSA私钥



你好,我想让我的函数从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);

最新更新