Функция 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 |