【发布时间】:2018-03-15 15:48:55
【问题描述】:
使用 Windows API CryptEncrypt 加密大文件时遇到问题。目前只能加密小文本文件。 我不确定如何运行 MSDN 中提到的 CryptEncrypt。
谁能给我一些帮助?
bool fEOF = FALSE;
do {
if (!ReadFile(hSourceFile, pbBuffer, dwBlockLen, &dwCount, NULL)) {
handleError("Error reading source.\n", GetLastError());
goto Exit_encryptFile;
}
if (dwCount < dwBlockLen) {
fEOF = TRUE;
}
//Encrypt File
if (!CryptEncrypt(hKey, NULL, fEOF, 0, pbBuffer, &dwCount, dwBufferLen)) {
handleError("Error during CryptEncrypt.\n", GetLastError());
wchar_t err[256];
memset(err, 0, 256);
FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err, 255, NULL);
int msgboxID = MessageBoxW(NULL,
err,
(LPCWSTR)L"☠",
MB_OK);
goto Exit_encryptFile;
}
【问题讨论】:
-
请提供minimal reproducible example 和明确的问题陈述。另见How to Ask问题
-
哪一行会导致这个错误?还有your know the drill....
-
哦,不,很抱歉。我不经常使用论坛,所以我不知道规则。
-
@VTT CryptEncrypt 抛出 bad data 错误。认为这是由于大文件被扔进 API 造成的
-
@VTT 当使用分组密码时,此数据长度必须是分组大小的倍数,除非这是要加密的数据的最后一部分且 Final 参数为 TRUE。
标签: c++ winapi encryption