Шифрование открытого ключа RSA с помощью Poco завершается с ошибкой доступа к файлу - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь зашифровать открытый ключ RSA, сгенерированный мной, с помощью libary poco crypto. Идея пришла из этих ответов ( C ++ Шифрование текстового файла, разрешить использование расшифровки через ifstream ). Pubkey в форме «MIIBIDANBgkqhkiG ......... == Я использую Ubuntu 16.04 и библиотеку Poco версии 1.7.8p2, которая была построена с OpenSSL 1.0.2g.

Код, который я использую, следующий:

#include <iostream>
#include <fstream> 
#include "Poco/Crypto/CipherFactory.h"
#include "Poco/Crypto/Cipher.h"
#include "Poco/Crypto/RSADigestEngine.h"

using namespace std;
using namespace Poco::Crypto;

int main(int argc, char** argv)   
{ 
    try {
  Cipher::Ptr pCipher = CipherFactory::defaultFactory().createCipher(RSAKey("pubkey.txt"));       
    } 
    catch (const exception& exc)
        {
            cout << exc.what() << endl;
        }   
}

Когда я запускаю приведенный выше код, я получаю исключение "ошибка доступа к файлу" Файл TXT имеет все разрешения для чтения, записи и выполнения. После этого я попытался с помощью конструктора istream, который предоставляет класс RSAKey:

int main(int argc, char** argv)

{
    try {

        ifstream myfile("pubkey.txt");
        Cipher::Ptr pCipher = CipherFactory::defaultFactory().createCipher(RSAKey(&myfile));

    catch (const exception& exc)

    {

      cout << exc.what() << endl;

    }

}

Но я получил ту же ошибку.

Это сработало, когда я заменил приведенный выше код следующей строкой:

Cipher::Ptr pCipher = CipherFactory::defaultFactory().createCipher(RSAKey(RSAKey::KL_1024, RSAKey::EXP_SMALL));

Но это не то, что я хочу. Я также печатаю текстовый файл в строку, используя

ifstream myfile("pubkey.txt");
string file;
myfile >> file;
file;

и файл правильно записан в строку.

Что я делаю не так в этом случае?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...