2013-12-17 28 views
5

我在Windows密鑰存儲中創建了RSA密鑰對。解密使用CryptoAPI不可導出的私鑰

予加密的數據(對稱密鑰)在成功:

HCERTSTORE hstore = ::CertOpenSystemStore(NULL, L"TestStore"); 
PCCERT_CONTEXT pctxt = ::CertFindCertificateInStore(hstore, X509_ASN_ENCODING, NULL, 

CERT_FIND_SUBJECT_STR, L"My Test Keys", NULL); 

HCRYPTPROV hprovider = NULL; 
if(!::CryptAcquireContext(&hprovider, 
      NULL, 
      MS_ENHANCED_PROV, 
      PROV_RSA_FULL, 
        NULL/*CRYPT_NEWKEYSET*/)) 
{ 
    DWORD err = ::GetLastError(); 
    return 0; 
} 

HCRYPTKEY hkey = NULL; 
if(!::CryptImportPublicKeyInfo(hprovider, 
       X509_ASN_ENCODING, 
       &pctxt->pCertInfo->SubjectPublicKeyInfo, 
       &hkey 
       )) 
{ 
    return 0; 
} 

現在我使用CryptEncrypt()與HCRYPTKEY。


接下來我想用私鑰解密數據,但它不可導出。我見過的所有例子都包括密鑰的導入。

如何在不導出密鑰的情況下解密數據?

回答

0

好吧,我不是RSA /微軟商店的專家,但我想我在這裏得到你想要做的。你做了一些倒退。您正在使用公鑰進行加密,並使用私鑰進行解密。所以假設你有私鑰,因爲這是你用來生成公鑰的。

所以,讓我們來看...解密你需要一個密鑰的數據吧?所以你可以(a)用公鑰加密數據,然後找到一種導出私鑰的方法,但是你會使用類似於私鑰加密的方法,無論如何你最好使用河豚,或者b)使用您的私鑰對數據進行加密,以便您可以共享公鑰解密。記住CryptImportPublicKeyInfo返回一個句柄:http://msdn.microsoft.com/en-us/library/windows/desktop/aa380209(v=vs.85).aspx

所以我說的是你已經有了你的答案。當你說你有對稱密鑰時,它就在那裏。要麼使用相同的公鑰進行解密,要麼將進行簡單的轉換:http://en.wikipedia.org/wiki/Symmetric-key_algorithm