我正在向旧版C ++应用程序添加功能。附加功能需要该软件对字符串数据进行加密和解密。对于包含三个或更多字符的字符串,一切正常,但是调用:: CryptEncrypt失败,错误代码为ea,两个字符串。
以下代码适用于较长的字符串,这些字符串从本地文件解析为pData。
ULONGLONG uLength = m_file.GetLength();
ULONGLONG uCapacity = uLength * 2;
m_file.SetLength(uCapacity);
// Acquire direct access to the memory.
BYTE* pData = m_file.Detach();
// We need a DWORD to tell encrypt how much data we're encrypting.
DWORD dwDataLength = static_cast<DWORD>(uLength);
// Now encrypt the memory file.
if(!::CryptEncrypt(m_hKey, NULL, TRUE, 0, pData, &dwDataLength, static_cast<DWORD>(uCapacity)))
{
DWORD dLastError = GetLastError();
// Free the memory we release from the memory file.
delete [] pData;
return false;
}
对于2个字符串,uLength为3(字符数+ 2个字符串内容)。 uCapacity为6。m_file是CMemFile对象。 pData读取为字符串长度+ 2个字符。 dwDataLength在CryptEncrypt调用之前为6。调用之后,dwDataLength返回为8(为什么?),而dLastError为0x0000ea。
3个字符串(及更长)可以正常工作。有人知道发生了什么吗?谢谢。