При загрузке большого файла изображения выдается исключение std :: bad_allo c в CryptoPP :: FileSource - PullRequest
1 голос
/ 01 февраля 2020

В проекте c ++ я использую CryptoPP для выполнения шифрования AES / CBC / PKCS5Padding для файлов изображений. Ниже приведен код, который я использую (из Хранение IV с зашифрованным текстом Crypto ++ CB C AES шифрование )

#include <iostream>
#include <osrng.h>
#include <files.h>
#include <modes.h>

using namespace std;
using namespace CryptoPP;

int main()
{
    cout << "Hello World!\n";

    AutoSeededRandomPool prng;
    SecByteBlock iv(AES::BLOCKSIZE);
    string _key = "0123456789abcdef";
    SecByteBlock key((const byte*)_key.data(), _key.size());

    RandomNumberSource rs2(prng, AES::BLOCKSIZE, new ArraySink(iv, iv.size()));

    CBC_Mode<AES>::Encryption encryptor;
    encryptor.SetKeyWithIV(key, key.size(), iv, iv.size());


    // Plaintext message
    ByteQueue queue;
    FileSource source("E:\\ori_pics\\20161224_143119.jpg", true, new Redirector(queue));

    SecByteBlock block(queue.MaxRetrievable());
    ArraySink sink(block, block.size());
    queue.TransferTo(sink);

    // Output file
    FileSink file("D:\\enc_pics\\20161224_143119.jpg");

    // Source wrappers
    ArraySource as(iv, iv.size(), true, new Redirector(file));
    ArraySource ss(block, block.size(), true, new StreamTransformationFilter(encryptor, new Redirector(file), BlockPaddingSchemeDef::PKCS_PADDING));

}

В этой программе я использую случайный IV и фиксированный ключ , Я пишу IV в начале выходного файла, а затем зашифровываю содержимое файла с помощью PKCS_PADDING.

Выше программа работает очень хорошо, когда я использую файл .txt в качестве ввода, она генерирует зашифрованный текстовый файл. Но когда я предоставляю .jpg файл размером 55,35,433 байта (приблизительно 5 МБ), тогда в строку кода выдается исключение std::bad_alloc: FileSource source("E:\\ori_pics\\20161224_143119.jpg", true, new Redirector(queue)); из файла misc.h из функции CallNewHandler().

Что я делаю не так? Почему шифрование файла .txt выполняется той же программой успешно, а .jpg - неудачно?

...