Функция CryptImportPublicKeyInfoEx (wincrypt.h)

Важно Этот API является устаревшим. Новое и существующее программное обеспечение должно начать использовать API-интерфейсы шифрования следующего поколения. Корпорация Майкрософт может удалить этот API в будущих выпусках.
 
Функция CryptImportPublicKeyInfoEx импортирует сведения об открытом ключе в поставщик служб шифрования (CSP) и возвращает дескриптор открытого ключа. Дополнительные параметры для переопределения значений по умолчанию предоставляются в дополнение к параметрам в CERT_PUBLIC_KEY_INFO.

Синтаксис

BOOL CryptImportPublicKeyInfoEx(
  [in]  HCRYPTPROV            hCryptProv,
  [in]  DWORD                 dwCertEncodingType,
  [in]  PCERT_PUBLIC_KEY_INFO pInfo,
  [in]  ALG_ID                aiKeyAlg,
  [in]  DWORD                 dwFlags,
  [in]  void                  *pvAuxInfo,
  [out] HCRYPTKEY             *phKey
);

Параметры

[in] hCryptProv

Дескриптор CSP для получения импортированного открытого ключа. Этот дескриптор уже должен быть создан с помощью CryptAcquireContext.

[in] dwCertEncodingType

Указывает используемый тип кодирования. Всегда допустимо указывать типы кодирования сертификатов и сообщений, объединяя их с побитовой операцией ИЛИ , как показано в следующем примере:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

В настоящее время определены следующие типы кодирования:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pInfo

адрес структуры CERT_PUBLIC_KEY_INFO , содержащей открытый ключ для импорта в поставщик.

Примечание Элемент pzObjId элемента Algorithm , на который указывают параметры pInfo и dwCertEncodingType , определяют устанавливаемую CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC функцию обратного вызова. Если устанавливаемая функция не найдена, предпринимается попытка импортировать ключ в качестве открытого ключа RSA (szOID_RSA_RSA).
 

[in] aiKeyAlg

Структура ALG_ID , содержащая алгоритм CSP для переопределения алгоритма CALG_RSA_KEYX по умолчанию.

[in] dwFlags

Зарезервировано для использования в будущем и должно быть равно нулю.

[in] pvAuxInfo

Зарезервировано для использования в будущем и должно иметь значение NULL.

[out] phKey

Адрес переменной HCRYPTKEY , которая получает дескриптор импортированного открытого ключа. Завершив использование открытого ключа, отпустите дескриптор, вызвав функцию CryptDeographyKey .

Возвращаемое значение

Если функция выполняется успешно, функция возвращает ненулевое значение (TRUE).

Если функция завершается сбоем, она возвращает ноль (FALSE). Для получения дополнительных сведений об ошибке вызовите Метод GetLastError.

Примечание Ошибки из вызываемых функций CryptGetUserKey и CryptExportKey могут распространяться на эту функцию. Эта функция имеет следующий код ошибки.
 
Значение Описание
ERROR_FILE_NOT_FOUND
Не удалось найти функцию импорта, которую можно установить или зарегистрировать для указанных параметров dwCertEncodingType и pInfo .
 

Если функция завершается сбоем, GetLastError может вернуть ошибку кодирования и декодирования абстрактной синтаксической нотации 1 (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.

Комментарии

Эта функция обычно используется для получения открытого ключа из сертификата. Это делается путем передачи структуры CERT_PUBLIC_KEY_INFO из заполненной структуры сертификата, как показано в следующем псевдокоде.

PCCERT_CONTEXT pCertContext

// Get the certificate context structure from a certificate.
pCertContext = CertCreateCertificateContext(...)
if(pCertContext)
{
    HCRYPTKEY hCertPubKey

    // Get the public key information for the certificate.
    CryptImportPublicKeyInfo(
        hCryptProv, 
        X509_ASN_ENCODING, 
        &pCertContext->pCertInfo->SubjectPublicKeyInfo, 
        &hCertPubKey)

    CertFreeCertificateContext(pCertContext)
}

Требования

   
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

См. также раздел

CryptExportPublicKeyInfoEx

Функции Управление данными