Функция 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.
Windows Server 2008 и Windows Vista: Этот параметр не используется и должен иметь значение NULL.
[in] pszBlobType
Строка Юникода, заканчивающаяся null, которая содержит идентификатор, указывающий тип большого двоичного объекта для экспорта. Это может быть одно из следующих значений.
Значение | Значение |
---|---|
|
Экспорт ключа AES в оболочке. Параметр hExportKey должен ссылаться на допустимый указатель BCRYPT_KEY_HANDLE на ключ шифрования ключа, а ключ, представленный параметром hKey , должен быть кратным 8 байтам.
Windows Server 2008 и Windows Vista: Этот тип BLOB не поддерживается. |
|
Экспорт пары открытого и закрытого ключей Diffie-Hellman. Буфер pbOutput получает BCRYPT_DH_KEY_BLOB структуру сразу после ключевых данных. |
|
Экспорт открытого ключа Diffie-Hellman. Буфер pbOutput получает BCRYPT_DH_KEY_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 начинается. |
|
Экспорт открытого ключа 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 начинается. |
|
Экспорт закрытого ключашифрования эллиптических кривых (ECC). Буфер pbOutput получает BCRYPT_ECCKEY_BLOB структуру, за которой следует ключевые данные. |
|
Экспорт открытого ключа ECC. Буфер pbOutput получает BCRYPT_ECCKEY_BLOB структуру, за которой следует ключевые данные. |
|
Экспорт симметричного ключа в большой двоичный объект данных. Буфер pbOutput получает BCRYPT_KEY_DATA_BLOB_HEADER структуру сразу после ключа BLOB. |
|
Экспорт симметричного ключа в формате, специфичном для одного поставщика служб шифрования (CSP). Непрозрачные BLOB-объекты не могут быть переданы и должны быть импортированы с помощью того же CSP, что и большой двоичный объект. Непрозрачные BLOB-объекты предназначены только для межпроцессной передачи ключей и не подходят для сохранения и чтения в разных версиях поставщика. |
|
Экспорт универсального открытого ключа любого типа. Тип ключа в этом BLOB-объекте определяется элементом Magicструктуры BCRYPT_KEY_BLOB . |
|
Экспорт универсального закрытого ключа любого типа. Закрытый ключ не обязательно содержит открытый ключ. Тип ключа в этом BLOB-объекте определяется элементом Magicструктуры BCRYPT_KEY_BLOB . |
|
Экспортируйте полную пару открытого и закрытого ключей RSA. Буфер pbOutput получает BCRYPT_RSAKEY_BLOB структуру, за которой сразу же следуют ключевые данные. Этот BLOB будет содержать дополнительный материал ключа по сравнению с типом BCRYPT_RSAPRIVATE_BLOB . |
|
Экспорт пары открытого и закрытого ключей RSA. Буфер pbOutput получает BCRYPT_RSAKEY_BLOB структуру, за которой сразу же следуют ключевые данные. |
|
Экспорт открытого ключа RSA. Буфер pbOutput получает BCRYPT_RSAKEY_BLOB структуру, за которой сразу же следуют ключевые данные. |
|
Экспортируйте устаревший blOB-объект закрытого ключа Diffie-Hellman версии 3 , содержащий пару открытого и закрытого ключей Diffie-Hellman, которую можно импортировать с помощью CryptoAPI. |
|
Экспортируйте устаревший blOB-объект открытого ключа Diffie-Hellman версии 3 , содержащий Diffie-Hellman открытый ключ, который можно импортировать с помощью CryptoAPI. |
|
Экспортируйте пару открытого и закрытого ключей DSA в форме, которую можно импортировать с помощью CryptoAPI. |
|
Экспортируйте открытый ключ DSA в форму, которую можно импортировать с помощью CryptoAPI. |
|
Экспортируйте закрытый ключ DSA версии 2 в форму, которую можно импортировать с помощью CryptoAPI. |
|
Экспортируйте пару открытого и закрытого ключей RSA в форме, которую можно импортировать с помощью CryptoAPI. |
|
Экспортируйте открытый ключ RSA в форме, которую можно импортировать с помощью CryptoAPI. |
[out] pbOutput
Адрес буфера, получающего blOB-объект ключа. Параметр cbOutput содержит размер этого буфера. Если этот параметр имеет значение NULL, эта функция поместит необходимый размер в байтах в ULONG , на который указывает параметр pcbResult .
[in] cbOutput
Содержит размер буфера pbOutput в байтах.
[out] pcbResult
Указатель на ULONG , получающий количество байтов, скопированных в буфер pbOutput . Если параметр pbOutput имеет значение NULL, эта функция помещет требуемый размер в байтах в ULONG , на который указывает этот параметр.
[in] dwFlags
Набор флагов, которые изменяют поведение этой функции. Для этой функции не определены флаги.
Возвращаемое значение
Возвращает код состояния, указывающий на успешное или неудачное выполнение функции.
Возможные коды возврата включают, помимо прочего, следующие.
Код возврата | Описание |
---|---|
|
Функция выполнена успешно. |
|
Размер, заданный параметром cbOutput , недостаточно велик для хранения зашифрованного текста. |
|
Дескриптор ключа в параметре hKey недопустим. |
|
Один или несколько параметров недопустимы. |
|
Указанный тип 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 |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по