gpt4 book ai didi

c++ - 函数 CryptEncrypt 期间崩溃

转载 作者:行者123 更新时间:2023-11-30 04:45:49 26 4
gpt4 key购买 nike

我正在编写将生成 RSA key 对、导出\导入 key 和加密字符串的小程序。所以,我写了这段代码:

void EncryptString(std::string data) 
{
int lenght = strlen(data.c_str());
DWORD temp = data.length() * sizeof(char);
DWORD possiblersa = 0;

unsigned char* buffer = new unsigned char[lenght];

std::copy(data.begin(), data.end(), buffer);

if (!CryptEncrypt(hKey, NULL, true, NULL, NULL, &possiblersa, NULL))
{
printf("Error: %d\n", GetLastError());
ExitThread(0);
}

if (!CryptEncrypt(hKey, NULL, true, NULL, buffer, &temp, possiblersa)) // Problem here
{
printf("Error: %d\n", GetLastError());
ExitThread(0);
}

DWORD dlen = 0;
if (!CryptBinaryToString(buffer, possiblersa, CRYPT_STRING_BASE64, NULL, &dlen))
{
printf("Error: %d\n", GetLastError());
ExitThread(0);
}

TCHAR* str = new TCHAR[dlen];

if (!CryptBinaryToString(buffer, possiblersa, CRYPT_STRING_BASE64, str, &dlen))
{
printf("Error: %d\n", GetLastError());
ExitThread(0);
}

for (DWORD i = 0; i < dlen; i++)
{
printf("%d\n", str);
}

delete[] buffer;
delete[] str;
}

CryptEncrypt 以崩溃告终。我不知道该怎么做才能解决这个问题。

最佳答案

CryptEncrypt(hKey, NULL, true, NULL, NULL, &possiblersa, NULL))

将在 possiblersa 中存储通过从空指针加密零字节返回的数据量。您几乎肯定需要传入要加密的实际数据(来自 data.c_str())。

CryptEncrypt(hKey, NULL, true, NULL, buffer, &temp, possiblersa)

这会加密您的纯文本并声明您提供的缓冲区的长度为possiblera。这几乎肯定不是真的:possiblersa 很可能比 length 大得多。

您需要延迟分配缓冲区(并将明文复制到其中),直到您发现密文缓冲区需要多大。 (它至少和明文一样长,但也可以长得多。)

关于c++ - 函数 CryptEncrypt 期间崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57055338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com