【发布时间】:2019-07-19 06:27:29
【问题描述】:
我已经制作了这段代码,它正在加密字符串并将其转换为 base64 字符串(以便我可以复制它)。
void EncryptString(std::string data)
{
DWORD strlen = data.size() * sizeof(char);
unsigned char* buffer = new unsigned char[0];
buffer = (LPBYTE)malloc(strlen);
std::copy(data.begin(), data.end(), buffer);
DWORD lenght = 0;
if (!CryptEncrypt(hKey, 0, TRUE, 0, NULL, &lenght, NULL))
{
ExitThread(0);
}
buffer = (LPBYTE)malloc(lenght);
if (!CryptEncrypt(hKey, 0, TRUE, 0, buffer, &strlen, lenght))
{
ExitThread(0);
}
DWORD dlen2 = 0;
if (!CryptBinaryToString(buffer, lenght, CRYPT_STRING_BASE64, NULL, &dlen2))
{
ExitThread(0);
}
TCHAR* tempo = new TCHAR[dlen2];
if (!CryptBinaryToString(buffer, lenght, CRYPT_STRING_BASE64, tempo, &dlen2))
{
ExitThread(0);
}
for (int i = 0; i < dlen2; i++)
{
printf("%c", tempo[i]);
}
}
我得到这样的字符串:
li2b5qyVGbwJw6qAIitPRFI5BbRua2W0hJ1y6YLCKOOOkvQg3i4gZbUd3vaRzKRP F5rHd9HvGTxHX6hOsJah8LfBeftf3ZBrE+F/zcGKQqcENesrxNpm1yLZDtaJdMbZ JcdNcP/JoyVuvS2Gbc0I35chzBCRafwtRLD41aIdNfxnLw9+R4CQQ8BmKUUD8U7d 2wLIZzW+kPSWBLYw2JU69x0H8e2rA1AhJEqnGtypfeOKxTmOzvCzQQFaykp4vLyp t7MoIjArwhNqdpajKfVtu74hUmn2OgLX6FfO8x1bRs61NUnF9f2PniTzI4pyVAjx +MQioBwlro/xLjnOn4vppne6w4cbLzH8JIZC9Zqhn1LFGBE5fAlstlrv3onHfRdm yTvgLxGqFC8RdJ6uEuS10u7EBC/Whq4Ti4XpyET/ILmIHlZmK9mVICE7c95DirTS ejqNQNODmZtqgs4+sJLyFSZV3bkzKyIjrl9K1riAozLFdS8OeeAdbilEFpBXWLy9 5Q1xPkhRasauHMYRkv13pH58zaqcoHF/ThKHg+uPbY8dByfM/9v+igSK/fr88S49 iHam92vIpia+6SbJxilg+00jpMn+ZinLweHPG/kngbENbxFE4m9HbbZC9Vk8NAbG uMiVP8kL0UL5cuKxR771sav1tXQInNuJOKZ+g9qixlg=
解密:
void Decrypt()
{
DWORD dlen = 0;
if (!CryptStringToBinary(dataKey, strlen(dataKey), CRYPT_STRING_BASE64, NULL, &dlen, NULL, NULL))
{
printf("Error while getting size... %d\n", GetLastError());
exit(0);
}
BYTE* temp;
if (!(temp = (LPBYTE)malloc(dlen)))
{
printf("Out of memory %d\n", GetLastError());
exit(0);
}
if (!CryptStringToBinary(dataKey, strlen(dataKey), CRYPT_STRING_BASE64, temp, &dlen, NULL, NULL))
{
printf("Error while converting to base64 string... %d\n", GetLastError());
exit(0);
}
if (!CryptDecrypt(hKey, NULL, true, 0, temp, &dlen))
{
printf("Can't get lenght! %d", GetLastError());
exit(0);
}
for (DWORD i = 0; i < dlen; i++)
{
printf("%c", temp[i]);
}
printf("\n");
}
【问题讨论】:
-
TCHAR的类型是什么?你为什么不使用char? -
@paddy 更舒服
-
你没有回答我的第一个问题。
-
无关:我曾经被作为宏实现的
strlen函数和变量名strlen所折磨。这是一次痛苦的经历,花了几个小时才弄清楚。错误信息是......它们仍然困扰着我的梦想。 -
也许你对我的两个问题中的哪一个是第一个感到困惑。你已经两次回答了我的第二个问题。
TCHAR通常定义为wchar_t。