PKCS11中解密私钥的机制是什么

时间:2017-01-19 07:13:17

标签: encryption rsa private-key pkcs#11

以下是我的代码的一部分

我已经通过RSACryptoProvider

从另一个应用VB.net加密了一些文本

但是我坚持要用C解密。

这是我的代码。

static CK_RV usePrivateKeytoDecrypt(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject) {
CK_RV rv = CKR_OK;
CK_MECHANISM mechanism = {
    {CKM_RSA_PKCS_OAEP}
};

rv = C_DecryptInit(hSession, &mechanism, hObject);

return rv;

}

代码未完成。我尝试调试并得到错误CKR_MECHANISM_PARAM_INVALID

请帮忙。感谢

3 个答案:

答案 0 :(得分:0)

这取决于密钥对的算法。

如果密钥对的算法 RSA ,则可能 CKM_RSA_PKCS / CKM_RSA_PKCS_OAEP / CKM_RSA_X_509

如果密钥对的算法 EC ,则可能 CKM_ECDSA

提供,私钥的属性 CKA_DECRYPT 设置为true。

您可以在此处参考此documentation

答案 1 :(得分:0)

您未正确初始化机制结构。 CK_MECHANISM是一个需要定义3个参数的结构:

typedef struct CK_MECHANISM {
  CK_MECHANISM_TYPE mechanism;
  CK_VOID_PTR       pParameter;
  CK_ULONG          ulParameterLen;  /* in bytes */
} CK_MECHANISM;

您需要按照以下方式初始化您的机制:

CK_MECHANISM  mechanism = { CKM_RSA_PKCS_OAEP, NULL_PTR, 0 };

如果您将私有 - 公共密钥对生成为RSA密钥对(使用CKM_RSA_PKCS_KEY_PAIR_GEN机制),例如

CK_MECHANISM  GenMechanism = { CKM_RSA_PKCS_KEY_PAIR_GEN, NULL_PTR, 0 };

然后你需要初始化你的解密机制,如下所示:

CK_MECHANISM  mechanism   = { CKM_RSA_PKCS, NULL_PTR, 0};

我认为您已经使用hsession登录了,而hObject是用于解密的定位私钥?

答案 2 :(得分:0)

您必须设置机制参数:

CK_RSA_PKCS_OAEP_PARAMS oaepParams = {CKM_SHA_1, CKG_MGF1_SHA1, 1, NULL_PTR, 0};
CK_MECHANISM MechEncrypt = {CKM_RSA_PKCS_OAEP, &oaepParams, sizeof(oaepParams)};