【发布时间】:2018-03-18 02:53:45
【问题描述】:
我可以在加密后解密一个带有“这是纯文本”的小文本文件。但是,当我尝试解密较大的文件时,我最终会遇到 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 我确实在每个 API 之后调用了 GetLastError。该程序仅在 CryptDecrypt 失败。需要我把整个代码上传到这里给你看吗?
-
未指定函数参数的求值顺序。我们不知道
handleError函数签名,据我们所知,它可以从字符串文字构造一些临时的(例如std::string),从而使GetLastError的结果无效。不要让我们猜,生成一个minimal reproducible example。 -
@IInspectable 我已经在 pastebin 上上传了标题和实现者。看看吧。标头:pastebin.com/5KU21KFC 实现者:pastebin.com/sTH5C6PK
-
所有代码必须在问题中。有充分的理由。提出一个好问题是有好处的。请参阅How to Ask 以获得指导。
标签: c++ windows winapi encryption windows-console