Поделиться через


Функция NCryptExportKey (ncrypt.h)

Функция NCryptExportKey экспортирует ключ CNG в большой двоичный объект памяти.

Синтаксис

SECURITY_STATUS NCryptExportKey(
  [in]            NCRYPT_KEY_HANDLE hKey,
  [in, optional]  NCRYPT_KEY_HANDLE hExportKey,
  [in]            LPCWSTR           pszBlobType,
  [in, optional]  NCryptBufferDesc  *pParameterList,
  [out, optional] PBYTE             pbOutput,
  [in]            DWORD             cbOutput,
  [out]           DWORD             *pcbResult,
  [in]            DWORD             dwFlags
);

Параметры

[in] hKey

Дескриптор ключа для экспорта.

[in, optional] hExportKey

Дескриптор криптографического ключа целевого пользователя. Данные ключа в экспортируемом blOB-объекте ключа шифруются с помощью этого ключа. Это гарантирует, что только конечный пользователь сможет использовать ключевой BLOB-объект.

[in] pszBlobType

Строка Юникода, заканчивающаяся нулевым значением, которая содержит идентификатор, указывающий тип большого двоичного объекта для экспорта. Это может быть одно из следующих значений.

BCRYPT_DH_PRIVATE_BLOB

Экспорт пары открытого и закрытого ключей Diffie-Hellman. Буфер pbOutput получает BCRYPT_DH_KEY_BLOB структуру, за которой сразу же следуют данные ключа.

BCRYPT_DH_PUBLIC_BLOB

Экспорт открытого ключа Diffie-Hellman. Буфер pbOutput получает BCRYPT_DH_KEY_BLOB структуру, за которой сразу же следуют данные ключа.

BCRYPT_DSA_PRIVATE_BLOB

Экспорт пары открытого и закрытого ключей DSA. Буфер pbOutput получает BCRYPT_DSA_KEY_BLOB структуру, за которой сразу же следуют данные ключа.

BCRYPT_DSA_PUBLIC_BLOB

Экспорт открытого ключа DSA. Буфер pbOutput получает BCRYPT_DSA_KEY_BLOB структуру, за которой сразу же следуют данные ключа.

BCRYPT_ECCPRIVATE_BLOB

Экспорт закрытого ключашифрования на эллиптических кривых (ECC). Буфер pbOutput получает BCRYPT_ECCKEY_BLOB структуру, за которой сразу же следуют данные ключа.

BCRYPT_ECCPUBLIC_BLOB

Экспорт открытого ключа ECC. Буфер pbOutput получает BCRYPT_ECCKEY_BLOB структуру, за которой сразу же следуют данные ключа.

BCRYPT_PUBLIC_KEY_BLOB

Экспорт универсального открытого ключа любого типа. Тип ключа в этом BLOB-объекте определяется магическим элементом структуры BCRYPT_KEY_BLOB .

BCRYPT_PRIVATE_KEY_BLOB

Экспорт универсального закрытого ключа любого типа. Закрытый ключ не обязательно содержит открытый ключ. Тип ключа в этом BLOB-объекте определяется магическим элементом структуры BCRYPT_KEY_BLOB .

BCRYPT_RSAFULLPRIVATE_BLOB

Экспортируйте полную пару открытого и закрытого ключей RSA. Буфер pbOutput получает BCRYPT_RSAKEY_BLOB структуру, за которой сразу же следуют данные ключа. Этот большой двоичный объект будет содержать дополнительный материал ключа по сравнению с типом BCRYPT_RSAPRIVATE_BLOB .

BCRYPT_RSAPRIVATE_BLOB

Экспорт пары открытого и закрытого ключей RSA. Буфер pbOutput получает BCRYPT_RSAKEY_BLOB структуру, за которой сразу же следуют данные ключа.

BCRYPT_RSAPUBLIC_BLOB

Экспорт открытого ключа RSA. Буфер pbOutput получает BCRYPT_RSAKEY_BLOB структуру, за которой сразу же следуют данные ключа.

LEGACY_DH_PRIVATE_BLOB

Экспортируйте устаревший большой двоичный объект закрытого ключа Diffie-Hellman версии 3 , содержащий пару открытого и закрытого ключей Diffie-Hellman, которую можно импортировать с помощью CryptoAPI.

LEGACY_DH_PUBLIC_BLOB

Экспортируйте устаревший большой двоичный объект закрытого ключа Diffie-Hellman версии 3 , содержащий Diffie-Hellman открытый ключ, который можно импортировать с помощью CryptoAPI.

LEGACY_DSA_PRIVATE_BLOB

Экспорт пары открытого и закрытого ключей DSA в форме, которую можно импортировать с помощью CryptoAPI.

LEGACY_DSA_PUBLIC_BLOB

Экспортируйте открытый ключ DSA в форме, которую можно импортировать с помощью CryptoAPI.

LEGACY_RSAPRIVATE_BLOB

Экспортируйте пару открытого и закрытого ключей RSA в форме, которую можно импортировать с помощью CryptoAPI.

LEGACY_RSAPUBLIC_BLOB

Экспортируйте открытый ключ RSA в форме, которую можно импортировать с помощью CryptoAPI.

NCRYPT_CIPHER_KEY_BLOB

Экспорт ключа шифра в структуру NCRYPT_KEY_BLOB_HEADER .

Windows 8 и Windows Server 2012: начинается поддержка этого значения.

NCRYPT_OPAQUETRANSPORT_BLOB

Экспортируйте ключ в формате, который зависит от одного поставщика служб конфигурации и подходит для транспорта. Непрозрачные BLOB-объекты не могут быть переданы и должны быть импортированы с помощью того же CSP, который создал большой двоичный объект.

NCRYPT_PKCS7_ENVELOPE_BLOB

Экспорт большого двоичного объекта-конверта PKCS #7. Параметры, определяемые параметром pParameterList , могут или должны содержать следующие параметры, как указано в столбце Обязательный или необязательный.

Параметр Обязательный или необязательный
NCRYPTBUFFER_CERT_BLOB Обязательно
NCRYPTBUFFER_PKCS_ALG_OID Обязательно
NCRYPTBUFFER_PKCS_ALG_PARAM Необязательно

NCRYPT_PKCS8_PRIVATE_KEY_BLOB

Экспорт большого двоичного объекта закрытого ключа PKCS 8. Параметры, определяемые параметром pParameterList , могут или должны содержать следующие параметры, как указано в столбце Обязательный или необязательный.

Параметр Обязательный или необязательный
NCRYPTBUFFER_PKCS_ALG_OID Необязательно
NCRYPTBUFFER_PKCS_ALG_PARAM Необязательно
NCRYPTBUFFER_PKCS_SECRET Необязательно

NCRYPT_PROTECTED_KEY_BLOB

Экспорт защищенного ключа в структуру NCRYPT_KEY_BLOB_HEADER .

Windows 8 и Windows Server 2012: начинается поддержка этого значения.

[in, optional] pParameterList

Адрес структуры NCryptBufferDesc , которая получает сведения о параметрах для ключа. Этот параметр может иметь значение NULL , если эти сведения не требуются.

[out, optional] pbOutput

Адрес буфера, получающего большой двоичный объект ключа. Параметр cbOutput содержит размер этого буфера. Если этот параметр имеет значение NULL, эта функция поместит требуемый размер в байтах в DWORD , на который указывает параметр pcbResult .

[in] cbOutput

Размер буфера pbOutput в байтах.

[out] pcbResult

Адрес переменной DWORD , которая получает количество байтов, скопированных в буфер pbOutput . Если параметр pbOutput имеет значение NULL, эта функция поместит требуемый размер в байтах в DWORD , на который указывает этот параметр.

[in] dwFlags

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

Значение Значение
NCRYPT_SILENT_FLAG Запрашивает, чтобы поставщик служб ключей (KSP) не отображал пользовательский интерфейс. Если поставщик должен отображать пользовательский интерфейс для работы, вызов завершается сбоем, а KSP должен задать код ошибки NTE_SILENT_CONTEXT как последнюю ошибку.

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

Возвращает код состояния, указывающий на успешное или неудачное выполнение функции.

Возможные коды возврата включают, помимо прочего, следующие.

Код возврата Описание
ERROR_SUCCESS Функция выполнена успешно.
NTE_BAD_FLAGS Параметр dwFlags содержит недопустимое значение.
NTE_BAD_KEY_STATE Недопустимый ключ, указанный параметром hKey . Наиболее распространенной причиной этой ошибки является то, что ключ не был заполнен с помощью функции NCryptFinalizeKey .
NTE_BAD_TYPE Ключ, заданный параметром hKey , нельзя экспортировать в тип BLOB, заданный параметром pszBlobType .
NTE_INVALID_HANDLE Недопустимый параметр hKey или hExportKey .
NTE_INVALID_PARAMETER Один или несколько параметров недопустимы.

Комментарии

Служба не должна вызывать эту функцию из функции StartService. Если служба вызывает эту функцию из функции StartService , может возникнуть взаимоблокировка, и служба может перестать отвечать.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header ncrypt.h
Библиотека Ncrypt.lib
DLL Ncrypt.dll

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