1

我正在尝试使用 windows.h 和 wincrypt.h 库构建一个简单的应用程序,以便加密一些字符串。

当我调用该函数时,CryptProtectData(&input, NULL, NULL, NULL, NULL, 0, &output);我得到错误:

error: undefined reference to `_imp__CryptProtectData@28'

我在网上搜索了很多,但没有找到太多。我还意识到 Chromium 浏览器使用与我类似的代码来加密和解密其登录信息,我并没有做不同的事情。

我正在使用 QtCreator IDE 来编译我的代码。

我的一些代码:

  std::string plaintext="Some plain text";
  DATA_BLOB input;
  input.pbData = const_cast<BYTE*>(
      reinterpret_cast<const BYTE*>(plaintext.data()));
  input.cbData = static_cast<DWORD>(plaintext.length());

  DATA_BLOB output;
  BOOL result = CryptProtectData(&input, NULL, NULL, NULL, NULL,
                                 0, &output);

编辑:忘了提到我已经包含了 windows.h 和 wincrypt.h 库,当然。

4

2 回答 2

6

这是由于您没有提供函数所需的库文件而导致的链接器错误CryptProtectData。您需要将Crypt32库传递给链接器。

此信息包含在该函数的MSDN 文档中。向下滚动到主题的底部以查看信息。

作为一般规则,要使用 API 函数,您需要查看函数文档中的“要求”部分。这列出了以下信息:

  • 支持的最低 Windows 版本。
  • 您需要包含的头文件。
  • 您需要传递给链接器的库文件。
于 2013-03-25T11:53:42.777 回答
3

你有联系Crypt32.dll还是更确切地说Crypt32.lib?将 .lib 添加到您的依赖项中。出现此类错误时,请始终查看文档

于 2013-03-25T11:54:13.847 回答