我正在尝试使用EVP函数生成唯一的RSA密钥对,然后将其保存为PEM编码。然而,我的测试产生了一种情况,即每次都会生成相同的密钥对。如何让密钥对安全随机?代码重现如下。
#include <iostream>
#include <string>
#include <openssl/pem.h>
#include <openssl/evp.h>
int main()
{
EVP_PKEY *keypair;
keypair = NULL;
EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL);
if(EVP_PKEY_keygen_init(ctx) <= 0)
{
}
if(EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, 2048) <= 0)
{
}
if(EVP_PKEY_keygen(ctx, &keypair) <= 0)
{
}
EVP_PKEY_CTX_free(ctx);
BIO *bio = BIO_new(BIO_s_mem());
PEM_write_bio_PUBKEY(bio, keypair);
int pubKeyLen = BIO_pending(bio);
unsigned char *pubKey;
pubKey = new unsigned char[pubKeyLen];
if(pubKey == NULL)
{
BIO_free_all(bio);
}
BIO_read(bio, pubKey, pubKeyLen);
// Insert the NUL terminator
pubKey[pubKeyLen-1] = '\0';
BIO_free_all(bio);
std::cout << std::string((const char*)pubKey, pubKeyLen);
delete[] pubKey;
return 0;
}
答案 0 :(得分:0)
您是否确定整个base64输出字符串是相同的,而不是仅使用相同的字符串MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA?每次都有相同的标题信息,但后面的密钥材料会有所不同。 - 软性
实际上就是这种情况。感谢。