Entschlüsseln mit einem nicht exportierbaren privaten Schlüssel mit CryptoAPI

Ich habe RSA-Schlüsselpaar im Windows-Schlüsselspeicher erstellt.

Ich habe Daten (ein symmetrischer Schlüssel) erfolgreich verschlüsselt:

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;
}

Jetzt habe ich CryptEncrypt() mit HCRYPTKEY benutzt.


Als nächstes möchte ich die Daten mit dem privaten Schlüssel entschlüsseln, aber es ist nicht exportierbar. Alle Beispiele, die ich gesehen habe, beinhalten den Import der Schlüssel.

Wie kann ich die Daten entschlüsseln, ohne den Schlüssel zu exportieren?

0

1 Antworten

Nun, ich bin kein Experte im RSA/Microsoft Store, aber ich denke, ich verstehe, was Sie hier versuchen. Du machst es ein bisschen rückwärts. Sie verwenden den öffentlichen Schlüssel zum Verschlüsseln und den privaten Schlüssel zum Entschlüsseln. Die Annahme ist also, dass Sie den privaten Schlüssel haben, da Sie den öffentlichen Schlüssel generiert haben.

So, let's see... to decrypt the data you need a key, right? So you can (a) encrypt the data with the public key and then find a way to export the private key, but then you'd be using something akin to private key encryption and you'd be better off using blowfish anyway, or (b) encrypt the data using your private key so that you can share the public key to decrypt. Remember CryptImportPublicKeyInfo returns a handle to it: http://msdn.microsoft.com/en-us/library/windows/desktop/aa380209(v=vs.85).aspx

So what I'm saying is that you already have your answer. It's there when you say you have a symmetric key. Either you'll use the same public key to decrypt or it will be a simple transformation: http://en.wikipedia.org/wiki/Symmetric-key_algorithm

0
hinzugefügt