Я создал пару ключей RSA в хранилище ключей Windows.
Я успешно зашифровал данные (симметричный ключ):
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.
Далее я хочу расшифровать данные с помощью закрытого ключа, но он не подлежит экспорту. Все примеры, которые я видел, включают импорт ключей.
Как я могу расшифровать данные без экспорта ключа?
Ну, я не эксперт в магазине RSA / Microsoft, но я думаю, что я понимаю, что вы пытаетесь сделать здесь. Вы делаете это немного назад. Вы используете открытый ключ для шифрования, а закрытый — для расшифровки. Таким образом, предполагается, что у вас будет закрытый ключ, поскольку именно это вы использовали для генерации открытого ключа.
Итак, давайте посмотрим … для расшифровки данных вам нужен ключ, верно? Таким образом, вы можете (а) зашифровать данные с помощью открытого ключа и затем найти способ экспортировать закрытый ключ, но тогда вы будете использовать что-то похожее на шифрование с закрытым ключом, и вам все равно будет лучше использовать blowfish, или ( б) зашифровать данные с помощью вашего личного ключа, чтобы вы могли поделиться открытым ключом для расшифровки. Помните, CryptImportPublicKeyInfo возвращает дескриптор к нему: http://msdn.microsoft.com/en-us/library/windows/desktop/aa380209(v=vs.85).aspx
Так что я говорю, что у вас уже есть свой ответ. Это там, когда вы говорите, что у вас есть симметричный ключ. Либо вы будете использовать тот же открытый ключ для расшифровки, либо это будет простое преобразование: http://en.wikipedia.org/wiki/Symmetric-key_algorithm
Других решений пока нет …