C ++ CryptDecrypt错误NTE_BAD_DATA

时间:2017-10-06 10:11:43

标签: c++ windows winapi encryption windows-console

我可以在加密后用“这是一个明文”解密一个小文本文件。但是,当我尝试解密更大的文件时,我最终会出现 NTE_BAD_DATA 的错误。

任何人都可以指出可能出现的问题?

以下是整个代码的摘录部分。

#define ENCRYPT_BLOCK_SIZE 256

dwBlockLen = 1000 - 1000 % ENCRYPT_BLOCK_SIZE;
dwBufferLen = dwBlockLen;

if (!ReadFile(hSourceFile, pbBuffer, dwBlockLen, &dwCount, NULL)) {
    handleError("Error reading from source file.\n", GetLastError());
    goto Exit_decryptFile;
}

if (dwCount <= dwBlockLen) {
    fEOF = TRUE;
}

if (!CryptDecrypt(hKey, 0, fEOF, 0, pbBuffer, &dwCount)) {
    handleError("Error during CryptDecrypt.\n", GetLastError());
    goto Exit_decryptFile;
}

1 个答案:

答案 0 :(得分:0)

因为你读了232个字节。如果文本很小(少于232字节),则解密一个(最终)块。如果文本足够大 - 你解密块,缓冲区的大小应该是块大小的倍数。