Czy przy użyciu Windows CryptoAPI można uzyskać publiczny klucz RSA z klucza prywatnego, który został zaimportowany (nie wygenerowany)?
Jeśli używam CryptGenKey, mogę zadzwonićCryptExportPublicKeyInfo i CryptImportPublicKeyInfo, aby uzyskać uchwyt klucza publicznego. Jednak gdy próbuję zrobić to samo z kluczem prywatnym zdekodowanym z PEM i zaimportowanym za pomocą:
CryptImportKey(hCSP, pKeyBuf, cbKeyBuf, 0, CRYPT_EXPORTABLE, &hPrivKey)
import klucza prywatnego powiedzie się i mampoprawny uchwyt, ale kolejne wywołanie CryptExportPublicKeyInfo nie powiedzie się z błędem „Klucz nie istnieje”. Wygląda na to, że między CryptImportKey a CryptExportPublicKeyInfo brakuje innego wywołania, ale nie mogę znaleźć tego wywołania API.
Odpowiedzi:
1 dla odpowiedzi № 1Problemem z eksportowaniem / importowaniem klucza publicznego był fakt, że klucz prywatny został wygenerowany przy użyciu AT_SIGNATURE, zamiast AT_EXCHANGE. Zobacz wyjaśnienie i przykładowy kod