Я пытаюсь зашифровать открытый ключ 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;
и файл правильно записан в строку.
Что я делаю не так в этом случае?