我想創建一個CNG(的Windows加密API下一代)鑰匙手柄通過調用NCryptOpenKey()
和使用證書的指紋作爲密鑰名稱參數:NCryptOpenKey()
LPCWSTR keyName = L"\0xe0\0xf5\0xdf\0x72\0x7f\0x81\0x92\0xfa\0xae\0x8a\0x4b\0xf1\0xd5\0x53\0xc1\0xbe\0x40\0x18\0x90\0xdc";
NCryptOpenKey(hProvider, &hKey, keyName, 0, 0);
使用此鍵名鍵不能發現,但是當我在certmgr.msc中查找時,我可以看到帶有該指紋的證書(「e0 f5 df 72 7f 81 92 fa ae 8a 4b f1 d5 53 c1 be 40 18 90 dc
」)。這裏可能是什麼問題?
編輯:我基本上想要做的事情(正如我在堆棧溢出人員的幫助下發現的那樣))是從存儲在Windows證書存儲中的證書創建NCRYPT_KEY_HANDLE。
也許你應該使用ASCII十六進制表示,而不是二進制十六進制表示的。 –
你的意思是這樣的:'LPCWSTR的keyName = L 「e0f5df727f8192faae8a4bf1d553c1be401890dc」;'?我剛剛嘗試過,仍然無法找到鑰匙。我想知道是否有人真的使用CNG API來做我們正在做的事情,那就是:用戶安裝一個證書(持有私鑰),並且程序試圖使用這個證書解密一些數據(從未見過或檢索私鑰)。我不認爲這是一種不尋常的方法 - 是嗎? – kitomer
我終於通過使用函數'CryptAcquireCertificatePrivateKey()'使用參數'CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG'解決與人民羣衆的幫助的問題。這使我可以獲得一個'NCRYPT_KEY_HANDLE',然後我可以使用它來加密/解密數據。看起來,如果安裝了附有私鑰的證書(在Windows 7中),則附加的私鑰將安裝在CNG密鑰存儲中。該解決方案還導致了CNG API不能用於查找某個證書的結論,只是所有已安裝的私鑰。 – kitomer