使用密码将RSA私钥写入PEM文件

时间:2019-06-22 16:55:15

标签: c++ openssl rsa

我正在编写C ++函数来创建RSA密钥对并将私钥存储在PEM文件中。我使用以下示例中的代码:

static unsigned char passphrase[] = "0123456789";
int keySize = 2048;
int keyExponent = 65537;
BIGNUM *bn;
. . .
bn = BN_new();
BN_set_word(bn, keyExponent);
rsa = RSA_new();
RSA_generate_key_ex(rsa, keySize, bn, nullptr);
FILE* fp = fopen(fileName, "w");
PEM_write_RSAPrivateKey(fp, rsa, EVP_des_ede3_cbc(), passphrase, 10, nullptr, nullptr);

该代码可以正常工作,但是现在我被要求存储没有密码短语保护的私钥。有没有办法让功能PEM_write_RSAPrivateKey不使用密码?我尝试过的一种选择是如下更改函数调用:

outcome = PEM_write_RSAPrivateKey(fp, rsa, EVP_des_ede3_cbc(), nullptr, 0, nullptr, nullptr);

但是,这会提示用户输入密码短语(这与功能PEM_write_RSAPrivateKey的文档中所述完全相同)。我还尝试使用返回零(表示没有密码)的密码短语回调,但这导致PEM_write_RSAPrivateKey返回错误。

要如何在没有密码的情况下将私钥存储在PEM文件中,该怎么办?我认为这一定有可能实现,因为我可以使用openssl命令(例如:openssl genrsa -out tmsPrivKey.pem 2048)来做到这一点。

1 个答案:

答案 0 :(得分:0)

第三个参数是用于加密私钥的加密密码。因此,您需要做的就是将nullptr传递给该函数。

例如

outcome = PEM_write_RSAPrivateKey(fp, rsa, nullptr, nullptr, 0, nullptr, nullptr);

来自documentation

  

编写私钥的PEM函数采用一个enc参数,该参数   指定要使用的加密算法,加密在   PEM级别。如果此参数设置为NULL,则私钥为   以未加密形式编写。