2013-12-17 6 views
5

Я создал пару ключей RSA в хранилище ключей Windows.Расшифровка с использованием неэкспортируемого закрытого ключа с CryptoAPI

I зашифрованные данные (симметричный ключ) успешно:

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/Microsoft, но я думаю, что получаю то, что вы пытаетесь сделать здесь. Вы делаете это немного назад. Вы используете открытый ключ для шифрования, а частные расшифровываете. Поэтому предполагается, что у вас будет закрытый ключ, так как это то, что вы использовали для создания открытого ключа.

Итак, давайте посмотрим ... чтобы расшифровать данные, необходимые для ключа, не так ли? Таким образом, вы можете (a) зашифровать данные открытым ключом, а затем найти способ экспортировать закрытый ключ, но тогда вы будете использовать что-то похожее на шифрование с закрытым ключом, и вам все равно лучше использовать blowfish или (или) б) шифровать данные с помощью вашего закрытого ключа, чтобы вы могли делиться открытым ключом для дешифрования. Помните, что CryptImportPublicKeyInfo возвращает дескриптор: http://msdn.microsoft.com/en-us/library/windows/desktop/aa380209(v=vs.85).aspx

Так что я говорю, что у вас уже есть свой ответ. Это, когда вы говорите, что у вас симметричный ключ. Либо вы будете использовать один и тот же открытый ключ для дешифрования, либо это будет простое преобразование: http://en.wikipedia.org/wiki/Symmetric-key_algorithm

 Смежные вопросы

  • Нет связанных вопросов^_^