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

沒關係,我想通了。基本上,即使以同樣的方式初始化,也不能直接使用另一個公鑰 - 我需要首先導出該公鑰,然後使用句柄將其導入另一方的加密提供程序。

相關問題