2016-12-11 3 views
1

У меня есть открытый ключ в видеOpenSSL PEM_read_RSAPublicKey и PEM_read_RSA_PUBKEY сбой программы

-----BEGIN PUBLIC KEY----- 
MIIB... 
-----END PUBLIC KEY----- 

, который был создан с использованием OpenSSL. Я пытаюсь загрузить его в память, как, например:

FILE* file = fopen("public.pem","r"); 
if (file != nullptr) 
{ 
    //This can be changed to this for the same results: 
    //RSA* rsa = PEM_read_RSAPublicKey(file, nullptr, nullptr, nullptr); 
    RSA* rsa = PEM_read_RSA_PUBKEY(file, nullptr, nullptr, nullptr); 
    //etc... 
} 

Всякий раз, когда он попадает в RSA * = ... RSA выравнивают сбои программы. Я видел другую запись для этого и (как вы можете видеть), я пробовал это решение, и оно не работает.

Я попытался использовать версии BIO, и программа не сбой, но я получаю сообщение об ошибке «no start line».

Любые идеи относительно того, что может быть причиной этого?

+1

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

+0

Возможно, метод PEM_read_RSA_PUBKEY не должен быть задан 'nullptr'? –

+0

Я пробовал: if (! PEM_read_RSA_PUBKEY (файл, & rsa, nullptr, nullptr)) (где rsa инициализировалась с помощью RSA_new()), и она все еще сбой. Последние два поля - это только поля пароля, если вы используете пароль. Второй - последний указатель функции обратного вызова для поиска пароля, а последний - это void *, указывающий на char *. У шахты есть пароль, но использование (void *) пароля для последнего параметра не помогает. –

ответ

0
RSA* rsa = PEM_read_RSA_PUBKEY(file, nullptr, nullptr, nullptr); 

Второй аргумент не может быть нулевым. Это вызывает ваш крах. Кроме того, это указатель на указатель (двойная косвенность). Также смотрите PEM_read_RSA_PUBKEY man pages.

Может быть, вы должны использовать что-то вроде:

RSA* t = RSA_new(); 
RSA* rsa = PEM_read_RSA_PUBKEY(file, &t, nullptr, nullptr); 

Данные могут быть Malformed, и это может быть причиной неожиданной аварии. Если вы предоставляете реальные данные, мы обычно перекрестно проверяем их. В отсутствие реальных данных мы не можем сказать.

Возможно, вы также захотите посетить How to generate RSA private key using openssl?. Он показывает несколько форматов вывода RSA. Он также показывает вам, как управлять ресурсами OpenSSL с помощью C++.

+0

Я попробовал свой вариант, и он все еще разбился. Вместо этого я переключился на использование файлов BIO, и это сработало. Раньше у меня были проблемы с OpenSSL и FILE, так что idk, что происходит. Спасибо за вход :) –

 Смежные вопросы

  • Нет связанных вопросов^_^