我正在编写Microsoft Cryptoapi的测试应用程序。我想使用第二方的公共密钥导出一个方的秘密钥匙,然后将该秘密键导入第二方的秘密钥匙(这为通信设置了共享的秘密密钥)。这是我的代码:

if(!CryptExportKey(encryptT->hSymKey, decryptT->hPubKey, SIMPLEBLOB, 0, keyExBuf, &bufLen)) {
    FormattedDebugPrint(NULL, GetLastError(), "could not export secret key", TRUE);
    return -1;
}
if(!CryptImportKey(decryptT->hCryptProv, keyExBuf, bufLen, decryptT->hPubKey, 0, &(decryptT->hSymKey))) {
    FormattedDebugPrint(NULL, GetLastError(), "could not import secret key", TRUE);
    return -1;
}

这给出了错误:

80090001: Bad UID.

通过致电:

CryptGenKey(encryptT->hCryptProv, CALG_RSA_KEYX, CRYPT_EXPORTABLE, &(encryptT->hPubKey))

知道什么可能导致错误?

谢谢,

有帮助吗?

解决方案

没关系,我发现了。基本上,即使以相同的方式初始化了它,您也不能直接使用另一个公共密钥 - 我需要首先导出该公共密钥,然后将其使用句柄将其导入另一方的加密提供商。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top