我正在编写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
)来做到这一点。
答案 0 :(得分:0)
第三个参数是用于加密私钥的加密密码。因此,您需要做的就是将nullptr传递给该函数。
例如
outcome = PEM_write_RSAPrivateKey(fp, rsa, nullptr, nullptr, 0, nullptr, nullptr);
编写私钥的PEM函数采用一个enc参数,该参数 指定要使用的加密算法,加密在 PEM级别。如果此参数设置为NULL,则私钥为 以未加密形式编写。