Хочу сделать сложное более простым. Пытаюсь сделать две функции Кодирования и декодирования Строки паролем есть рабочий пример с файлами но в функции запечатать не получается.
(Помогите разобраться с функциями)
честно говоря хочу сделать функции и забыть всё, пользоваться простыми функциями в обще не понимаю зачем так усложнять задачу. Почему не сделать просто Функция(текст,пароль) всё.
Возможно у кого то есть готовые функции поделитесь пожалуйста.
Мой не рабочий пример
#include <iostream>
#include <iomanip>
#include <fstream>
#include<cryptopp\modes.h>
#include<cryptopp\aes.h>
#include<cryptopp\filters.h>
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <wincrypt.h>
#include <bcrypt.h>
#include <string.h>
#include <iostream>
#include <tchar.h>
#include <io.h>
using namespace CryptoPP;
using namespace std;
#pragma comment (lib,"cryptlib.lib")
int AEScrypto(string &S,string pass2)
{
CHAR pass[65];
strcpy(pass,pass2.c_str());
HCRYPTPROV hProv; //дескриптор криптопровайдера
HCRYPTKEY hKey; //дескриптор ключа, созданного из хэш-кода
HCRYPTHASH hHash; //дескриптор хэш-объекта
if (!CryptAcquireContext(&hProv, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, 0))
{
std::cout << "Error\n";
return 1;
}
if(!CryptCreateHash(hProv, CALG_SHA_256, 0, 0, &hHash))
{
std::cout << "Error\n";
CryptReleaseContext(hProv, 0);
return 1;
}
if (!CryptHashData(hHash, (BYTE *)pass, strlen(pass), 0))
{
std::cout << "Error\n";
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return 1;
}
if (!CryptDeriveKey(hProv, CALG_AES_192, hHash, CRYPT_EXPORTABLE, &hKey))
{
std::cout << "Error\n";
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return 1;
}
//std::ifstream ifs("data.txt", std::ifstream::binary);
//ifs.seekg(0, ifs.end);
//int len = ifs.tellg();
//ifs.seekg(0);
int len = S.size();
std::vector<char> data(len + 10240);
//std::vector<char>data;
for(int i = 0;i < S.size();i++)
{
data[i]=(S[i]);
}
//cout<<len;
// ifs.read(data.data(), len);
//ifs.close();
DWORD datalen = len;
if (!CryptEncrypt(hKey, NULL, true, 0, reinterpret_cast<BYTE *>(data.data()), &datalen, data.size()))
{
std::cout << "Error os\n";
return 0;
}
else
{
/*std::ofstream ofs("data_enc.txt", std::ifstream::binary);
ofs.write(data.data(), datalen);
ofs.close();*/
S = "";
for(int i = 0;i < data.size();i++)
{
S+= data[i];
//cout<<data[i]<<endl;
}
}
CryptDestroyHash(hHash);
CryptDestroyKey(hKey);
CryptReleaseContext(hProv, 0);
return 1;
}
int AESdecrypto(string &S,string pass2)
{
CHAR pass[65];
strcpy(pass,pass2.c_str());
HCRYPTPROV hProv; //дескриптор криптопровайдера
HCRYPTKEY hKey; //дескриптор ключа, созданного из хэш-кода
HCRYPTHASH hHash; //дескриптор хэш-объекта
if (!CryptAcquireContext(&hProv, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, 0))
{
std::cout << "Error\n";
return 1;
}
if(!CryptCreateHash(hProv, CALG_SHA_256, 0, 0, &hHash))
{
std::cout << "Error\n";
CryptReleaseContext(hProv, 0);
return 1;
}
if (!CryptHashData(hHash, (BYTE *)pass, strlen(pass), 0))
{
std::cout << "Error\n";
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return 1;
}
if (!CryptDeriveKey(hProv, CALG_AES_192, hHash, CRYPT_EXPORTABLE, &hKey))
{
std::cout << "Error\n";
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return 1;
}
// ifs.open("data_enc.txt", std::ifstream::binary);
// ifs.seekg(0, ifs.end);
// len = ifs.tellg();
// ifs.seekg(0);
int len = S.size();
std::vector<char> data(len + 10240);
//std::vector<char>data;
for(int i = 0;i < S.size();i++)
{
data[i]=(S[i]);
}
data.resize(len + 10240);
DWORD datalen = len;
// ifs.read(data.data(), len);
//ifs.close();
datalen = len;
if (!CryptDecrypt(hKey, NULL, true, 0, reinterpret_cast<BYTE *>(data.data()), &datalen))
{
std::cout << "Error\n";
}
else
{
/* std::ofstream ofs("data_dec.txt", std::ifstream::binary);
ofs.write(data.data(), datalen);
ofs.close();*/
S = "";
for(int i = 0;i < data.size();i++)
{
S+= data[i];
//cout<<data[i]<<endl;
}
}
CryptDestroyHash(hHash);
CryptDestroyKey(hKey);
CryptReleaseContext(hProv, 0);
}
int main(int argc, char* argv[]) {
string S123 = "CryptoText Ctypt";
std::cout<<AEScrypto(S123,"123456");
cout<<"\n"<<S123<<std::endl;
cin.get();
std::cout<<AESdecrypto(S123,"123456");
cout<<"\n"<<S123<<std::endl;
system("pause");
return 0;
}
Рабочий пример с фалами
#include <iostream>
#include <iomanip>
#include <fstream>
#include<cryptopp\modes.h>
#include<cryptopp\aes.h>
#include<cryptopp\filters.h>
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <wincrypt.h>
#include <bcrypt.h>
#include <string.h>
#include <iostream>
#include <tchar.h>
#include <io.h>
using namespace CryptoPP;
using namespace std;
#pragma comment (lib,"cryptlib.lib")
int main(int argc, char* argv[]) {
CHAR pass[65];
std::cin >> pass;
HCRYPTPROV hProv; //дескриптор криптопровайдера
HCRYPTKEY hKey; //дескриптор ключа, созданного из хэш-кода
HCRYPTHASH hHash; //дескриптор хэш-объекта
if (!CryptAcquireContext(&hProv, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, 0))
{
std::cout << "Error\n";
return 1;
}
if(!CryptCreateHash(hProv, CALG_SHA_256, 0, 0, &hHash))
{
std::cout << "Error\n";
CryptReleaseContext(hProv, 0);
return 1;
}
if (!CryptHashData(hHash, (BYTE *)pass, strlen(pass), 0))
{
std::cout << "Error\n";
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return 1;
}
if (!CryptDeriveKey(hProv, CALG_AES_192, hHash, CRYPT_EXPORTABLE, &hKey))
{
std::cout << "Error\n";
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return 1;
}
std::ifstream ifs("data.txt", std::ifstream::binary);
ifs.seekg(0, ifs.end);
int len = ifs.tellg();
ifs.seekg(0);
std::vector<char> data(len + 10240);
ifs.read(data.data(), len);
ifs.close();
DWORD datalen = len;
if (!CryptEncrypt(hKey, NULL, true, 0, reinterpret_cast<BYTE *>(data.data()), &datalen, data.size()))
{
std::cout << "Error\n";
}
else
{
std::ofstream ofs("data_enc.txt", std::ifstream::binary);
ofs.write(data.data(), datalen);
ofs.close();
}
CryptDestroyHash(hHash);
CryptDestroyKey(hKey);
CryptReleaseContext(hProv, 0);
///////////////////////////////////////////////////////////////////////////////////////////////////////
if (!CryptAcquireContext(&hProv, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, 0))
{
std::cout << "Error\n";
return 1;
}
if(!CryptCreateHash(hProv, CALG_SHA_256, 0, 0, &hHash))
{
std::cout << "Error\n";
CryptReleaseContext(hProv, 0);
return 1;
}
if (!CryptHashData(hHash, (BYTE *)pass, strlen(pass), 0))
{
std::cout << "Error\n";
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return 1;
}
if (!CryptDeriveKey(hProv, CALG_AES_192, hHash, CRYPT_EXPORTABLE, &hKey))
{
std::cout << "Error\n";
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
return 1;
}
ifs.open("data_enc.txt", std::ifstream::binary);
ifs.seekg(0, ifs.end);
len = ifs.tellg();
ifs.seekg(0);
data.resize(len + 10240);
ifs.read(data.data(), len);
ifs.close();
datalen = len;
if (!CryptDecrypt(hKey, NULL, true, 0, reinterpret_cast<BYTE *>(data.data()), &datalen))
{
std::cout << "Error\n";
}
else
{
std::ofstream ofs("data_dec.txt", std::ifstream::binary);
ofs.write(data.data(), datalen);
ofs.close();
}
CryptDestroyHash(hHash);
CryptDestroyKey(hKey);
CryptReleaseContext(hProv, 0);
//system("pause");
return 0;
}
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Помогите с FLTK, которую используют в книге СтрауструпаСкачал FLTK, собрал с помощью make install
Дан текстовый файл с изображением целых чисел, которые необходимо переписать в очередь Qu1В очередь Qu2 сначала записать числа палиндромы,...
Есть объект A который владеет объектом B (объявляется и инициализируется в конструкторе объекта A и является членом объекта A)