RSA импортирует пару ключей - PullRequest
0 голосов
/ 11 июля 2019

Итак, я создал код, который генерирует открытые \ частные ключи 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, но это также не дало никаких результатов.

...