Как преобразовать структуру openssl RSA в char * и обратно? - PullRequest
2 голосов
/ 29 марта 2019

Этот вопрос, скорее всего, дубликат, я прошу прощения, если да, но не могу найти решение Google.

Дано:

RSA* rsa = RSA_generate_key(2048, RSA_3, NULL, NULL);

Я бы хотел что-то вроде:

const char* pubKey = pubKeyFromRSA(rsa);
const char* privKey = privKeyFromRSA(rsa);

//and then convert it back
RSA* newRSA = RSAFromPrivKey(privKey);

Как мне это сделать? Спасибо

1 Ответ

0 голосов
/ 28 июня 2019

Спасибо Майклу Доргану, который указал мне правильное направление.Я получил эти две функции:

const char* keyFromRSA(RSA* rsa, bool isPrivate)
{
    BIO *bio = BIO_new(BIO_s_mem());

    if (isPrivate)
    {
        PEM_write_bio_RSAPrivateKey(bio, rsa, NULL, NULL, 0, NULL, NULL);
    }
    else
    {
        PEM_write_bio_RSA_PUBKEY(bio, rsa);
    }

    const int keylen = BIO_pending(bio);
    char* key = (char *)calloc(keylen+1, 1);
    BIO_read(bio, key, keylen);
    BIO_free_all(bio);

    return key;
}

RSA* rsaFromPrivateKey(const char* aKey)
{
     RSA* rsa = NULL;
     BIO *bio = BIO_new_mem_buf(aKey, strlen(aKey));
     PEM_read_bio_RSAPrivateKey(bio, &rsa, 0, 0);
     BIO_free_all(bio);

     return rsa;
}
...