rsa导入密钥对

时间:2019-07-11 09:17:19

标签: visual-c++ rsa wincrypt

因此,我编写了一个生成公共\专用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,但这也没有任何结果。

0 个答案:

没有答案