BIO到EVP_PKEY(公共和私人)

时间:2015-01-12 03:25:42

标签: c++ encryption openssl

我被困在如何将BIO *转换为其EVP_PKEY对应物,以便我以后可以在加密中使用它。目前我的keygen例程如下所示:

bool SecureCrypto::GenerateRSAKeys()
{
    BIGNUM* BigNum = nullptr;
    BIGNUM* BigNum2 = nullptr;
    BigNum = BN_new();
    if (BN_set_word(BigNum, RSA_F4) <= 0)
        return false;

    BigNum2 = BN_new();
    if (BN_set_word(BigNum2, RSA_F4) <= 0)
        return false;

    m_ServerKeyPair = RSA_new();
    m_ClientKeyPair = RSA_new();
    RSA_generate_key_ex(m_ServerKeyPair,RSA_KeyLen, BigNum, NULL);
    RSA_generate_key_ex(m_ClientKeyPair,RSA_KeyLen, BigNum2, NULL);

    PEM_write_bio_RSAPublicKey(m_ServerPublicKeyBIO, m_ServerKeyPair);
    PEM_write_bio_RSAPrivateKey(m_ServerPrivateKeyBIO,  
    m_ServerKeyPair,EVP_aes_256_cbc(), (unsigned char*)RSA_PrivKeyPassPhrase.c_str(),   
    RSA_PrivKeyPassPhrase.size(), NULL, NULL);

    PEM_write_bio_RSAPublicKey(m_ClientPublicBIO, m_ClientKeyPair);
    PEM_write_bio_RSAPrivateKey(m_ClientPrivateBIO, m_ClientKeyPair, EVP_aes_256_cbc(),    
    (unsigned char*)RSA_PrivKeyPassPhrase.c_str(), RSA_PrivKeyPassPhrase.size(), NULL,  
    NULL);

    BN_free(BigNum);
    BN_free(BigNum2);
    return true;
}

稍后我需要将m_ServerPrivateKeyBIO转换为EVP_PKEY以与EVP_SealInit一起使用。 我只知道PEM_read_bio_PrivateKey(),但每当我调用它时,我得到的返回值为0(失败)。我这样称呼它:

PEM_read_bio_PrivateKey(m_ServerPrivateKeyBIO, NULL, NULL, "Enc Key");

我计划在服务器上使用其私钥进行加密,然后将数据发送到客户端和客户端使用服务器公钥对其进行解密,我将不胜感激,因为OpenSSL文档根本没有帮助。< / p>

P.S我为测试生成了客户端和服务器密钥,显然这不会发生在最终代码中。

0 个答案:

没有答案