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


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

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

Замечание

 Дескриптор hExportKey должен быть предоставлен тем же поставщиком, который предоставил дескриптор hKey , и hExportKey должен быть дескриптором симметричного ключа, который можно использовать в алгоритме упаковки ключей уровня " Расширенный стандарт шифрования " (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_MLKEM_PRIVATE_SEED_BLOB Экспортируйте закрытый начальный ключ ML-KEM. Буфер pbOutput получает BCRYPT_MLKEM_KEY_BLOB структуру сразу после набора параметров и ключевых данных.

Примечание. ML-KEM обработчики ключей, которые содержат закрытый ключ, импортированный с помощью BCRYPT_MLKEM_PRIVATE_BLOB имеют недостаточно сведений для экспорта закрытого начального ключа.

Программы предварительной оценки Windows (сборка 27843): Начинается поддержка ML-KEM.
BCRYPT_MLKEM_PRIVATE_BLOB Экспортируйте закрытый ключ ML-KEM (decapsulation). Буфер pbOutput получает BCRYPT_MLKEM_KEY_BLOB структуру сразу после набора параметров и ключевых данных.

Программы предварительной оценки Windows (сборка 27843): Начинается поддержка ML-KEM.
BCRYPT_MLKEM_PUBLIC_BLOB Экспортируйте открытый ключ ML-KEM (инкапсуляция). Буфер pbOutput получает BCRYPT_MLKEM_KEY_BLOB структуру сразу после набора параметров и ключевых данных.

Программы предварительной оценки Windows (сборка 27843): Начинается поддержка ML-KEM.
BCRYPT_OPAQUE_KEY_BLOB Экспорт симметричного ключа в формате, относящееся к одному поставщику служб шифрования (CSP). Непрозрачные BLOB-объекты не переносимы и должны быть импортированы с помощью того же поставщика служб CSP, который создал БОЛЬШОЙ ДВОИЧНЫй объект. Непрозрачные BLOB-объекты предназначены только для межпроцессного передачи ключей и не подходят для сохранения и чтения в разных версиях поставщика.
BCRYPT_PQDSA_PRIVATE_SEED_BLOB Экспорт закрытого начального ключа после квантовой цифровой подписи (PQDSA). Буфер pbOutput получает BCRYPT_PQDSA_KEY_BLOB структуру сразу после набора параметров и ключевых данных.

Заметка: Ключ PQDSA, содержащий закрытый ключ, импортированный с помощью BCRYPT_PQDSA_PRIVATE_BLOB , недостаточно информации для экспорта закрытого начального ключа.

Программы предварительной оценки Windows (сборка 27843): Начинается поддержка ML-DSA.
BCRYPT_PQDSA_PRIVATE_BLOB Экспорт закрытого ключа PQDSA. Буфер pbOutput получает BCRYPT_PQDSA_KEY_BLOB структуру сразу после набора параметров и ключевых данных.

Программы предварительной оценки Windows (сборка 27843): Начинается поддержка ML-DSA.
BCRYPT_PQDSA_PUBLIC_BLOB Экспорт открытого ключа PQDSA. Буфер pbOutput получает BCRYPT_PQDSA_KEY_BLOB структуру сразу после набора параметров и ключевых данных.

Программы предварительной оценки Windows (сборка 27843): Начинается поддержка ML-DSA.
BCRYPT_PRIVATE_KEY_BLOB Экспорт универсального закрытого ключа любого типа. Закрытый ключ не обязательно содержит открытый ключ. Тип ключа в этом BLOB-объекте определяется магическим элементом структуры BCRYPT_KEY_BLOB .
BCRYPT_PUBLIC_KEY_BLOB Экспорт универсального открытого ключа любого типа. Тип ключа в этом BLOB-объекте определяется магическим элементом структуры 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 BLOB-объект закрытого ключа версии 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 , недостаточно велик для хранения зашифрованного текста. Если буфер pbOutput слишком мал, pcbResult получает количество байтов, необходимых для pbOutput.
STATUS_INVALID_HANDLE Дескриптор ключа в параметре hKey hKey недопустим.
СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР Один или несколько параметров недопустимы.
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