CryptEncrypt调用失败,错误提示为2个字符串

时间:2019-07-18 12:56:45

标签: c++ encryption

我正在向旧版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个字符串(及更长)可以正常工作。有人知道发生了什么吗?谢谢。

0 个答案:

没有答案