openssl — ключ преобразования c ++ / RSA

Я пытаюсь что-то зашифровать с помощью RSA.

Но моя библиотека RSA не позволяет использовать ключи x509.
Поэтому я попытался преобразовать его в ключ DER, используя openssl.

но я не очень понимаю, как это работает. я заметил два класса, которые казались нормальными, но я не могу понять, как их использовать.

функции являются:

-i2d_X509

-X509

Я нашел кусок кода, но я не могу понять это:

 int len;
unsigned char *buf, *p;

len = i2d_X509(x, NULL);

buf = OPENSSL_malloc(len);

if (buf == NULL)
/* error */

p = buf;

i2d_X509(x, &p);

Если бы вы могли помочь мне, было бы здорово.

0

Решение

i2d_X509 значит конвертировать X509 объект из внутреннего представления (который является X509 структура) в DER-кодированное представление (которое копируется в буфер или в файл).

Итак, в этом коде в строке

len = i2d_X509(x, NULL);

Вы определяете длину буфера или количество байтов, необходимых для представления данного сертификата в DER.

Затем вы выделяете столько памяти и последнее утверждение

len = i2d_X509(x, &p);

копирует X509 * сертификат в этот буфер в формате DER.

Этот буфер вы можете сохранить в файле и сохранить его как файл сертификата, скажем .cer, .crt, и открыть его любым инструментом сертификации.

Возвращаясь к вашей проблеме, вы можете использовать этот буфер в вашей программе, которая принимает сертификат DER.

Но ты упомянул ключ, не так ли?

Если тебе надо RSA Открытый ключ, то вы можете сделать следующее.

Вам может понадобиться сначала извлечь ключ с помощью X509_get_pubkey который даст ключ в EVP_PKEY состав.

 EVP_PKEY * pkey;
pkey = X509_get_pubkey(x);

RSA * rsa;
rsa = EVP_PKEY_get1_RSA(pkey);

Теперь выведите это RSA структура в DER.

int len;
unsigned char *buf, *p;

len = i2d_RSAPublicKey(rsa, buffer, buffer_length);

ассигновать buffer на достаточно большую длину скажем 4000 в зависимости от ключа.

Я думаю, что это поможет вам.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]