Функция BCryptExportKey (bcrypt.h)
Функция BCryptExportKey экспортирует ключ в память BLOB, которые можно сохранить для последующего использования.
Синтаксис
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
Дескриптор ключа, с помощью которого необходимо упаковать экспортируемый ключ. Используйте этот параметр при экспорте BLOB-объектов типа BCRYPT_AES_WRAP_KEY_BLOB; в противном случае задайте для него значение NULL.
Windows Server 2008 и Windows Vista: Этот параметр не используется и должен иметь значение NULL.
[in] pszBlobType
Строка Юникода, завершающая значение NULL, содержащая идентификатор, указывающий тип экспортируемых BLOB-объектов. Это может быть одно из следующих значений.
Ценность | Значение |
---|---|
|
Экспорт ключа AES, завернутого в оболочку. Параметр hExportKey должен ссылаться на допустимый указатель BCRYPT_KEY_HANDLE на ключ шифрования ключа, а ключ, представленный параметром hKey, должен иметь длину 8 байтов.
Windows Server 2008 и Windows Vista: этот тип BLOB-объектов не поддерживается. |
|
Экспортпары открытых и закрытых ключей Diffie-Hellman |
|
Экспортоткрытого ключа Diffie-Hellman |
|
Экспорт пары открытого и закрытого ключа 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 структуру сразу после ключевых данных. |
|
Экспорт симметричного ключа в 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 структуру сразу после ключевых данных. |
|
Экспорт устаревшей Diffie-Hellman bl OB-объекта закрытого ключа версии 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. Если параметр pbOutputNULL, эта функция будет размещать требуемый размер в байтах в ULONG, на которую указывает этот параметр.
[in] dwFlags
Набор флагов, изменяющих поведение этой функции. Для этой функции флаги не определены.
Возвращаемое значение
Возвращает код состояния, указывающий на успешность или сбой функции.
Возможные коды возврата включают в себя, но не ограничиваются следующими.
Возвращаемый код | Описание |
---|---|
|
Функция была успешной. |
|
Размер, указанный параметром cbOutput |
|
Дескриптор ключа в параметре hKey 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] |
целевая платформа | Виндоус |
заголовка | bcrypt.h |
библиотеки |
Bcrypt.lib |
DLL | Bcrypt.dll |