Я пытался зашифровать тестовую строку, используя openssl RSA_public_encrypt
, но это приводило к segfault при каждом запуске.
Я попытался проверить, является ли ключ RSA, который я читаю из файла pem, действительным, используя BIO, и он вернул открытый ключ с правильным ключом и размером экспоненты.
Я изначально пытался использовать PEM_read_bio_RSA_PUBKEY
, но это не сработало. Я не совсем уверен в разнице между этим и PEM_read_bio_RSAPublicKey
, так что если кто-то может пролить свет на это.
Кроме того, перед тем, как попробовать BIO
, я использовал обычную структуру FILE и соответствующие ей функции, и она продолжала давать мне ошибки, и я не мог проверить, был ли загружен правильный ключ RSA. Не уверен, что это связано.
#include <stdio.h>
#include <string.h>
#include <openssl/pem.h>
#include <openssl/rsa.h>
#include <openssl/conf.h>
int main()
{
RSA *rsa;
rsa = RSA_new();
BIO *bp_public = NULL;
RSA *pubkey;
bp_public = BIO_new_file("public.pem", "rt");
pubkey = PEM_read_bio_RSAPublicKey(bp_public, &rsa, NULL, NULL);
BIO * keybio = BIO_new(BIO_s_mem());
RSA_print(keybio, rsa, 0);
char buffer [2048];
while (BIO_read (keybio, buffer, 2048) > 0)
{
printf("%s", buffer);
}
BIO_free(bp_public);
if (pubkey == NULL || rsa == NULL)
printf("Something went wrong");
char msg[] = "Hello";
unsigned char * encrypted = NULL;
RSA_public_encrypt(5, (unsigned char *)msg, encrypted, rsa, RSA_PKCS1_OAEP_PADDING);
printf("Here: %s", encrypted);
}
Кроме того, я пытался использовать оба ключа pubkey
и rsa
, но ни один из них не работал.
Я уверен, что упускаю что-то довольно очевидное, но я потратил часы на это и сейчас вроде как потерян в документах openssl.
Спасибо за помощь!
Неуместное примечание: зашифрованный текст возвращает ноль, если я использую RSA_private_encrypt()