Непонятно, что вы на самом деле хотите, так как заголовок вашего вопроса и код отличаются, поэтому я собираюсь взять ваш код в качестве ссылки.Для меня это выглядит так, будто вы хотите зашифровать файл и расшифровать его позже.
Ваш большой блок на самом деле слишком много ... вы можете делать все довольно легко с std::filesystem
.
Также вы, похоже, все перепутываете, это может произойти, если вы не знакомы с алгоритмами шифрования и / или документацией самой библиотеки.Сначала вы ProcessData
, который, кажется, зашифровывает строку в inputfilename
(?).
В конце концов, вы можете захотеть взглянуть на документацию библиотеки и предоставленные примеры - они уже помогут ваммногое понять, как все это обрабатывается.
Вот рабочий автономный пример шифрования и дешифрования файла.
#include <filesystem>
#include "..\CryptoLib\osrng.h"
#include "..\CryptoLib\modes.h"
#include "..\CryptoLib\files.h"
#include "..\CryptoLib\aes.h"
template <typename T, std::size_t N>
constexpr std::size_t FixedArraySize(T(&arr)[N])
{ return N; }
int wmain(int argv, wchar_t **args)
{
try
{
using namespace CryptoPP;
constexpr CryptoPP::byte IV[] = { 0xab,0x10,0x55,0x29,0x73,0xb9,0xae,0xba,0xe9,0xe9,0xe5,0x26,0x35,0x66,0x63,0x55 };
constexpr char key[] = "ABCDEFGHIJKLMNOP";
const std::string extension = ".TEST";
const std::string sourceFile = __FILE__;
const std::string destinationFile = std::filesystem::path("Encrypted").replace_extension(extension).string();
const std::string finalFile = std::filesystem::path("Decrypted").replace_extension(extension).string();
{
CFB_Mode<AES>::Encryption encryption(reinterpret_cast<const CryptoPP::byte*>(key), FixedArraySize(key) - 1, IV);
FileSource fsEnc(sourceFile.c_str(), true, new StreamTransformationFilter(encryption, new FileSink(destinationFile.c_str())));
CFB_Mode<AES>::Decryption decryption(reinterpret_cast<const CryptoPP::byte*>(key), FixedArraySize(key) - 1, IV);
FileSource fsDec(destinationFile.c_str(), true, new StreamTransformationFilter(decryption, new FileSink(finalFile.c_str())));
}
std::filesystem::remove(destinationFile);
std::filesystem::remove(finalFile);
}
catch (const std::exception &e)
{
std::cout << e.what() << std::endl;
}
}