0

我正在为 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.

通过调用以下命令为 encryptT 和 decryptT(发送者、接收者)生成公钥对:

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

知道什么可能导致错误吗?

谢谢,

4

1 回答 1

0

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

于 2010-04-23T18:57:31.433 回答