【问题标题】:C++: CryptEncrypt Unable to encrypt large fileC++:CryptEncrypt 无法加密大文件
【发布时间】: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


【解决方案1】:

我想我通过将块大小增加到 256 解决了这个问题,它开始加密而没有任何错误。 看看我编码后能不能解密。

【讨论】:

    猜你喜欢
    • 2017-07-25
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2012-03-03
    相关资源
    最近更新 更多