EVP keygen功能每次都会产生相同的密钥

时间:2015-03-27 23:20:56

标签: c++ cryptography openssl rsa

我正在尝试使用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;
}

1 个答案:

答案 0 :(得分:0)

  

您是否确定整个base64输出字符串是相同的,而不是仅使用相同的字符串MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA?每次都有相同的标题信息,但后面的密钥材料会有所不同。     - 软性

实际上就是这种情况。感谢。