Итак, я создал код, который генерирует открытые \ частные ключи RSA. После его генерации выполняется экспорт в байтовый массив.
Я хочу сделать программу, которая будет шифровать строку с уникальной парой ключей RSA.
Все хорошо, но CryptImport заканчивается ошибкой 87.
Используемый код:
#include <windows.h>
#include <string>
#pragma comment (lib, "crypt32.lib")
HCRYPTPROV hProv;
HCRYPTKEY hKey;
BYTE* prKey;
BYTE* pbKey;
DWORD prkeyLen = 0;
DWORD pbkeyLen = 0;
void EncryptString(std::string data, int size)
{
if (!CryptImportKey(hProv, pbKey, pbkeyLen, NULL, 0, &hKey))
{
ExitThread(0);
}
DWORD possibleRSAenc = 0;
if (!CryptEncrypt(hKey, 0, TRUE, 0, NULL, &possibleRSAenc, NULL))
{
ExitThread(0);
}
DWORD sizeenc = size;
unsigned char* buff = new unsigned char[size];
std::copy(data.begin(), data.end(), buff);
if (!CryptEncrypt(hKey, 0, TRUE, 0, buff, &sizeenc, possibleRSAenc))
{
ExitThread(0);
}
DWORD dlen = 0;
if (!CryptBinaryToString(buff, possibleRSAenc, CRYPT_STRING_BASE64, NULL, &dlen))
{
ExitThread(0);
}
TCHAR* temp = new TCHAR[dlen];
if (!CryptBinaryToString(buff, possibleRSAenc, CRYPT_STRING_BASE64, temp, &dlen))
{
ExitThread(0);
}
data = temp;
}
int main()
{
Generate();
ExportKeys();
std::string temp = "1234567890";
EncryptString(temp, 11);
MessageBox(NULL, temp.c_str(), NULL, SW_SHOW);
}
Что я должен сделать, чтобы решить эту проблему? Я пытался добавить CryptAcquireContext
в начале функции EncryptString
, но это также не дало никаких результатов.