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


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

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

 

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

[in] pszBlobType

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

Ценность Значение
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
Экспорт симметричного ключа в 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
Экспорт устаревшей Diffie-Hellman bl OB-объекта закрытого ключа версии 3, который содержит пару открытых и закрытых ключей Diffie-Hellman, которую можно импортировать с помощью CryptoAPI.
LEGACY_DH_PUBLIC_BLOB
Экспорт устаревшего Diffie-Hellman Diffie-Hellman общедоступного ключа BL OB версии 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. Если параметр pbOutputNULL, эта функция будет размещать требуемый размер в байтах в ULONG, на которую указывает этот параметр.

[in] dwFlags

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

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

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

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

Возвращаемый код Описание
STATUS_SUCCESS
Функция была успешной.
STATUS_BUFFER_TOO_SMALL
Размер, указанный параметром cbOutput , недостаточно велик для хранения зашифрованного текста.
STATUS_INVALID_HANDLE
Дескриптор ключа в параметре hKey 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]
целевая платформа Виндоус
заголовка bcrypt.h
библиотеки Bcrypt.lib
DLL Bcrypt.dll

См. также

BCryptImportKey

BCryptImportKeyPair