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))
任何想法可能导致错误?
谢谢,
你可以发布更多的代码与创建encryptT-> hSymKey和导入decryptT-> hPubKey?你是否从证书导入hPubKey?你的错误在这两部分中。 – Oleg 2010-04-25 20:13:12
您好,感谢您的回应!是的,我直接从发送方导入公钥(“发件人”和“收件人”都在同一个应用程序中),而无需首先将公钥导出到PUBLICKEYBLOB中,然后使用接收方的CSP导入公钥。 – mindthief 2010-05-04 06:44:20