2013-05-31 75 views
0

我正在嘗試使用Microsoft的Crypto API來執行一些RSA。在Windows Vista和更高版本上,我的代碼運行時沒有問題。究竟是什麼「持久的私鑰」?

CryptAcquireContext(&m_hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0); 

不幸的是,我已經嘗試了兩個Windows XP的計算機時,收到錯誤代碼NTE_BAD_KEYSET(0x80090016)。

有一點谷歌搜索在Microsoft支持上找到了這篇文章。 http://support.microsoft.com/kb/238187

它提到了一個CRYPT_VERIFYCONTEXT標誌,如果「您沒有使用存儲在密鑰容器中的持久私鑰」,則該標誌可以被傳遞。在這種情況下,「持續私鑰」是什麼意思?

+0

我很確定你的意思是「持續」,對吧? – ypnos

+0

來自MS支持的確切引用說「持續」。我可以看到在這種情況下,「持久」會是怎樣互換的。 – ajs410

+0

「堅持」意味着存儲以便重複使用。例如,如果您正在驗證簽名,則只需要臨時訪問公鑰;當簽名被驗證(或驗證失敗)時,密鑰可能被破壞。該錯誤表示默認密鑰容器已被使用。 –

回答

0

由於沒有人回答,我最好的猜測是持久私鑰是放入密鑰存儲區的私鑰。我不使用密鑰存儲,我不知道爲什麼,但XP需要CRYPT_VERIFYCONTEXT和Vista +不。