(Crypto ++) Как реализовать шифрование медиафайлов? - PullRequest
1 голос
/ 20 апреля 2020

Я новичок в Crypto ++ и хочу "преобразовать" код шифрования текста, который я нашел в Интернете, в шифрование файлов Crypto ++. По сути, файл изображения - это просто набор текста, который нужно читать кусками, я прав?

Я хочу прочитать файл изображения и зашифровать его с помощью CryptoPP :: AES :

void encryptImage(std::filesystem::path const& file) {
    std::ifstream inpf(file.string().c_str(), std::ios::binary);

    CryptoPP::AutoSeededRandomPool rnd;
    int keyLength = CryptoPP::AES::DEFAULT_KEYLENGTH; // 16 bytes = 128 bit key
    int defBlockSize = CryptoPP::AES::BLOCKSIZE;
    // Generate a random key
    CryptoPP::byte key[CryptoPP::AES::DEFAULT_KEYLENGTH];
    rnd.GenerateBlock(key, CryptoPP::AES::DEFAULT_KEYLENGTH);

    // Generate a random IV
    CryptoPP::byte iv[CryptoPP::AES::BLOCKSIZE];
    rnd.GenerateBlock(iv, CryptoPP::AES::BLOCKSIZE);

    char plainText[] = "Hello! How are you.";
    int messageLen = (int)strlen(plainText) + 1;

    //encrypt
    CryptoPP::CFB_Mode<CryptoPP::AES>::Encryption cfbEncryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH, iv);
    cfbEncryption.ProcessData((CryptoPP::byte*)plainText, (CryptoPP::byte*)plainText, messageLen);
}

Если я правильно понимаю этот код, он устанавливает случайный ключ и случайный IV (не знаю, что это должно означать) и использует метод CFB_MODE :: Encryption зашифровать данный текст из переменной plainText .

Мой вопрос сейчас ... как я могу изменить этот код так, чтобы он шифровал файл, который я передаю в качестве параметра, и читал в с std :: ifstream вместо текста?

...