以下是我的代码的一部分
我已经通过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
请帮忙。感谢
答案 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)};