0

我正在为Microsoft CryptoAPI编写测试应用程序。我想使用第二方的公钥导出一方的密钥,然后导入该密钥作为第二方的密钥(这为通信建立了共享密钥)。这里是我的代码:在CryptoAPI中导出密钥时出现BAD_UID错误

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)) 

任何想法可能导致错误?

谢谢,

+0

你可以发布更多的代码与创建encryptT-> hSymKey和导入decryptT-> hPubKey?你是否从证书导入hPubKey?你的错误在这两部分中。 – Oleg 2010-04-25 20:13:12

+0

您好,感谢您的回应!是的,我直接从发送方导入公钥(“发件人”和“收件人”都在同一个应用程序中),而无需首先将公钥导出到PUBLICKEYBLOB中,然后使用接收方的CSP导入公钥。 – mindthief 2010-05-04 06:44:20

回答

0

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

相关问题