Функция BCryptExportKey (bcrypt.h)

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

Синтаксис

NTSTATUS BCryptExportKey(
  [in]  BCRYPT_KEY_HANDLE hKey,
  [in]  BCRYPT_KEY_HANDLE hExportKey,
  [in]  LPCWSTR           pszBlobType,
  [out] PUCHAR            pbOutput,
  [in]  ULONG             cbOutput,
  [out] ULONG             *pcbResult,
  [in]  ULONG             dwFlags
);

Параметры

[in] hKey

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

[in] hExportKey

Дескриптор ключа, с помощью которого выполняется упаковка экспортированного ключа. Используйте этот параметр при экспорте больших двоичных объектов типа BCRYPT_AES_WRAP_KEY_BLOB; В противном случае задайте для него значение NULL.

Примечание Дескриптор hExportKey должен быть предоставлен тем же поставщиком, который предоставил дескриптор hKey , а hExportKey должен быть дескриптором симметричного ключа, который может использоваться в алгоритме шифрования AES. Если дескриптор hKey от поставщика Майкрософт, hExportKey должен быть дескриптором ключа AES.

 

Windows Server 2008 и Windows Vista: Этот параметр не используется и должен иметь значение NULL.

[in] pszBlobType

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

Значение Значение
BCRYPT_AES_WRAP_KEY_BLOB
Экспорт ключа AES в оболочке. Параметр hExportKey должен ссылаться на допустимый указатель BCRYPT_KEY_HANDLE на ключ шифрования ключа, а ключ, представленный параметром hKey , должен быть кратным 8 байтам.

Windows Server 2008 и Windows Vista: Этот тип BLOB не поддерживается.

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_KEY_BLOB_V2 , за которой следует ключевые данные. BCRYPT_DSA_KEY_BLOB используется для ключей длиной от 512 до 1024 бит. BCRYPT_DSA_KEY_BLOB_V2 используется для ключей длиной, превышающей 1024 бит, но меньше или равно 3072 бит.

Windows 8. Поддержка BCRYPT_DSA_KEY_BLOB_V2 начинается.

BCRYPT_DSA_PUBLIC_BLOB
Экспорт открытого ключа DSA. Буфер pbOutput получает структуру BCRYPT_DSA_KEY_BLOB или BCRYPT_DSA_KEY_BLOB_V2 , за которой следует ключевые данные. BCRYPT_DSA_KEY_BLOB используется для ключей длиной от 512 до 1024 бит. BCRYPT_DSA_KEY_BLOB_V2 используется для ключей длиной, превышающей 1024 бит, но меньше или равно 3072 бит.

Windows 8. Поддержка BCRYPT_DSA_KEY_BLOB_V2 начинается.

BCRYPT_ECCPRIVATE_BLOB
Экспорт закрытого ключашифрования эллиптических кривых (ECC). Буфер pbOutput получает BCRYPT_ECCKEY_BLOB структуру, за которой следует ключевые данные.
BCRYPT_ECCPUBLIC_BLOB
Экспорт открытого ключа ECC. Буфер pbOutput получает BCRYPT_ECCKEY_BLOB структуру, за которой следует ключевые данные.
BCRYPT_KEY_DATA_BLOB
Экспорт симметричного ключа в большой двоичный объект данных. Буфер pbOutput получает BCRYPT_KEY_DATA_BLOB_HEADER структуру сразу после ключа BLOB.
BCRYPT_OPAQUE_KEY_BLOB
Экспорт симметричного ключа в формате, специфичном для одного поставщика служб шифрования (CSP). Непрозрачные BLOB-объекты не могут быть переданы и должны быть импортированы с помощью того же CSP, что и большой двоичный объект. Непрозрачные BLOB-объекты предназначены только для межпроцессной передачи ключей и не подходят для сохранения и чтения в разных версиях поставщика.
BCRYPT_PUBLIC_KEY_BLOB
Экспорт универсального открытого ключа любого типа. Тип ключа в этом BLOB-объекте определяется элементом Magicструктуры BCRYPT_KEY_BLOB .
BCRYPT_PRIVATE_KEY_BLOB
Экспорт универсального закрытого ключа любого типа. Закрытый ключ не обязательно содержит открытый ключ. Тип ключа в этом BLOB-объекте определяется элементом Magicструктуры BCRYPT_KEY_BLOB .
BCRYPT_RSAFULLPRIVATE_BLOB
Экспортируйте полную пару открытого и закрытого ключей RSA. Буфер pbOutput получает BCRYPT_RSAKEY_BLOB структуру, за которой сразу же следуют ключевые данные. Этот BLOB будет содержать дополнительный материал ключа по сравнению с типом BCRYPT_RSAPRIVATE_BLOB .
BCRYPT_RSAPRIVATE_BLOB
Экспорт пары открытого и закрытого ключей RSA. Буфер pbOutput получает BCRYPT_RSAKEY_BLOB структуру, за которой сразу же следуют ключевые данные.
BCRYPT_RSAPUBLIC_BLOB
Экспорт открытого ключа RSA. Буфер pbOutput получает BCRYPT_RSAKEY_BLOB структуру, за которой сразу же следуют ключевые данные.
LEGACY_DH_PRIVATE_BLOB
Экспортируйте устаревший blOB-объект закрытого ключа Diffie-Hellman версии 3 , содержащий пару открытого и закрытого ключей Diffie-Hellman, которую можно импортировать с помощью CryptoAPI.
LEGACY_DH_PUBLIC_BLOB
Экспортируйте устаревший blOB-объект открытого ключа Diffie-Hellman версии 3 , содержащий Diffie-Hellman открытый ключ, который можно импортировать с помощью CryptoAPI.
LEGACY_DSA_PRIVATE_BLOB
Экспортируйте пару открытого и закрытого ключей DSA в форме, которую можно импортировать с помощью CryptoAPI.
LEGACY_DSA_PUBLIC_BLOB
Экспортируйте открытый ключ DSA в форму, которую можно импортировать с помощью CryptoAPI.
LEGACY_DSA_V2_PRIVATE_BLOB
Экспортируйте закрытый ключ DSA версии 2 в форму, которую можно импортировать с помощью CryptoAPI.
LEGACY_RSAPRIVATE_BLOB
Экспортируйте пару открытого и закрытого ключей RSA в форме, которую можно импортировать с помощью CryptoAPI.
LEGACY_RSAPUBLIC_BLOB
Экспортируйте открытый ключ RSA в форме, которую можно импортировать с помощью CryptoAPI.

[out] pbOutput

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

[in] cbOutput

Содержит размер буфера pbOutput в байтах.

[out] pcbResult

Указатель на ULONG , получающий количество байтов, скопированных в буфер pbOutput . Если параметр pbOutput имеет значение NULL, эта функция помещет требуемый размер в байтах в ULONG , на который указывает этот параметр.

[in] dwFlags

Набор флагов, которые изменяют поведение этой функции. Для этой функции не определены флаги.

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

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

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

Код возврата Описание
STATUS_SUCCESS
Функция выполнена успешно.
STATUS_BUFFER_TOO_SMALL
Размер, заданный параметром cbOutput , недостаточно велик для хранения зашифрованного текста.
STATUS_INVALID_HANDLE
Дескриптор ключа в параметре hKey недопустим.
STATUS_INVALID_PARAMETER
Один или несколько параметров недопустимы.
STATUS_NOT_SUPPORTED
Указанный тип BLOB не поддерживается поставщиком.

Комментарии

В зависимости от того, какие режимы процессора поддерживает поставщик, BCryptExportKey можно вызывать либо из пользовательского режима, либо из режима ядра. Вызовы режима ядра могут выполняться в PASSIVE_LEVELIRQL или DISPATCH_LEVEL IRQL. Если текущий уровень IRQL DISPATCH_LEVEL, дескриптор, предоставленный в параметре hKey , должен быть производным от дескриптора алгоритма, возвращенного поставщиком, который был открыт с флагом BCRYPT_PROV_DISPATCH , а все указатели, передаваемые в функцию BCryptExportKey , должны ссылаться на непагрегированную (или заблокированную) память.

Чтобы вызвать эту функцию в режиме ядра, используйте файл Cng.lib, который входит в состав пакета средств разработки драйверов (DDK). Windows Server 2008 и Windows Vista: Чтобы вызвать эту функцию в режиме ядра, используйте Ksecdd.lib.

Требования

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

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

BCryptImportKey

BCryptImportKeyPair