【问题标题】:Use PKCS#11 in Visual Studio在 Visual Studio 中使用 PKCS#11
【发布时间】:2013-09-03 09:20:25
【问题描述】:

我需要使用标准 PKCS#11 连接到令牌。 在我用 Visual Studio 编写的 C 程序中,我包含了从 RSA 站点下载的 PKCS#11 标头和一些宏。

//define macros
#define CK_PTR *
#define CK_DEFINE_FUNCTION(returnType, name) returnType name
#define CK_DECLARE_FUNCTION(returnType, name) returnType name
#define CK_DECLARE_FUNCTION_POINTER(returnType, name) returnType (* name)
#define CK_CALLBACK_FUNCTION(returnType, name) returnType (* name)
#ifndef NULL_PTR
#define NULL_PTR 0
#endif

#include "pkcs11.h"

int main(int argc, char * argv[]) {
[..]
   C_Initialize(NULL_PTR);
   [..]

当我构建它时,我得到“对 C_Initialize 的未定义引用”。我使用的所有 pkcs11 函数都出现相同的错误。 在程序目录中还有其他 pkcs11 头文件。它有什么问题?

【问题讨论】:

  • 问题已解决。除了“eToken.dll”之外,我还添加了“cryptoki.h”和“pkcs11.h”标头以与 SafeNet eToken 通信。我也跟着这个帖子stackoverflow.com/questions/11993429/… 调用PKCS#11 函数!谢谢大家

标签: c visual-studio cryptography token pkcs#11


【解决方案1】:

对于静态链接,您需要有一个相应的 .lib 文件。如果您将应用程序与特定硬件设备的 SDK 链接,您就可以获得它。

通用方法是动态加载最终用户提供的 DLL。为此,您的代码需要使用 LoadLibrary() 和 GetProcAddress() Windows API 函数来获取库的每个函数的地址(是的,如果没有记忆,那里有 50 多个函数)。

【讨论】:

  • 我需要 OpenCryptoki 还是 OpenSc?在 linux 上我使用了 opencryptoki,一切都很好。我将 OpenSc dll 添加到 Visual Studio 资源中,但没有解决任何错误。
  • OpenCryptoki 应该可以工作,我认为。 OpenSC 是另一回事。
  • 是的,但是 OpenCryptoki 是用于 Linux 的,不是吗?其实我找不到图书馆!
  • @andret8 我相信我看到并安装了一些开源 PKCS#11,但我不记得现在是哪一个了。 BTW CryptLib 支持他们声称的 PKCS#11。如果不是,那么就像我所写的那样,创建动态导入需要几个小时的工作。你花了更多时间寻找图书馆。
【解决方案2】:

您没有链接到定义 C_Initialize 函数的任何目标文件或库。

【讨论】:

  • 标题中有对该函数的引用!另见 pkcs11t.h 和 pkcs11f.h
  • @andret8 标头仅声明函数,而不是定义函数。为此,您需要链接到正确的库。如果你用两个源文件创建一个项目也是一样的,一个源文件中的函数可能在一个公共头文件中声明,但是你需要两个源文件(或者更确切地说,编译的目标文件)否则您将收到关于缺少定义的相同错误。
  • 没关系。以前我在 Linux 上执行我的程序,但没有出现任何错误。也许我这里缺少一些库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
相关资源
最近更新 更多