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