C++ CryptDecrypt 错误 NTE_BAD_DATA
C++ CryptDecrypt error NTE_BAD_DATA
我能够在加密后解密一个包含 "This is a plaintext" 的小文本文件。但是,当我尝试解密更大的文件时,我得到了 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;
}
因为你读了232字节。如果文本很小(少于 232 字节),则您解密一个(最终)块。如果文本足够大 - 您解密块,缓冲区的大小应该是块大小的倍数。
我能够在加密后解密一个包含 "This is a plaintext" 的小文本文件。但是,当我尝试解密更大的文件时,我得到了 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;
}
因为你读了232字节。如果文本很小(少于 232 字节),则您解密一个(最终)块。如果文本足够大 - 您解密块,缓冲区的大小应该是块大小的倍数。