У меня есть клиент-серверное приложение. Это работает правильно. И я хочу добавить к нему криптографию. Я нахожу библиотеку Crypto++ и делаю с ее помощью какой-нибудь простой проект: для кодирования DES и для кодирования RSA. Он содержит два класса: EncoderDes
и EncoderRSA
:
class EncoderDES
{
public:
EncoderDES();
std::string encode(std::string plainText);
std::string decode(std::string cypher);
std::string toReadable(std::string cypher);
void doIt();
private:
AutoSeededRandomPool prng;
SecByteBlock key;
byte iv[];
};
class EncoderRSA
{
public:
EncoderRSA();
void keyGeneration();
void substitutePublicKey(Integer e, Integer n);
Integer encode(std::string plainText);
std::string decode(Integer cypher);
private:
AutoSeededRandomPool prng;
RSA::PublicKey publicKey;
RSA::PrivateKey privateKey;
};
Я думаю, сервер должен сгенерировать ключ DES и передать его каждому клиенту по RSA. И на этом этапе у меня есть несколько вопросов: 1. Как отправить (и как получить) RSA::PublicKey? 2. Как отправить (и как получить) SecByteBlock?
(Я не могу их отправить, потому что не могу: 1. преобразовать RSA::PublicKey в char* 2. преобразовать char* в RSA::PublicKey 3. преобразовать SecByteBlock в строку.)
Я могу преобразовать строку только в SecByteBlock:
SecByteBlock stringToKey(string decodedKey) {
SecByteBlock receivedKey(decodedKey.data(), decodedKey.size());
return receivedKey;
}
Но не уверен, что это правильно.
Как решить эти проблемы?