암호화 한 후 "This is a plaintext"라는 작은 텍스트 파일을 해독 할 수 있습니다. 그러나 더 큰 파일 크기의 암호를 해독하려고하면 NTE_BAD_DATA의 오류가 발생합니다.C++ CryptDecrypt 오류 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;
}
'GetLastError'를 너무 늦게 호출하려고합니다. 조건이 성립 된 후 ** 즉시 ** 전화를 걸고 의미있는 값을 반환합니다. – IInspectable
@IInspectable 모든 API 후에 GetLastError를 호출했습니다. 프로그램은 CryptDecrypt에서만 실패합니다. 내가보기에 전체 코드를 업로드해야하나요? – NinjaCow
함수 인수의 평가 순서가 지정되지 않았습니다. 우리는'handleError' 함수 시그니처를 알지 못합니다. 우리가 알고있는 모든 것에서 문자열 리터럴 (예 :'std :: string')에서 임시로 생성 할 수 있으므로'GetLastError'의 결과를 무효화 할 수 있습니다. 우리가 추측하지 말고, [mcve]를 만들어라. – IInspectable