Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция 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_PUBLIC_BLOB | BLOB - это ML-KEM BLOB, который обеспечивает импорт и экспорт стандартных байтов, закодированных ML-KEM ключей инкапсулирования на FIPS 203. Буфер pbOutput должен содержать BCRYPT_MLKEM_KEY_BLOB структуру, содержащую ключ инкапсулации KEM с кодировкой байтов, BCRYPT_MLKEM_PUBLIC_MAGIC и набор параметров ML-KEM. |
BCRYPT_MLKEM_PRIVATE_BLOB | BLOB — это ML-KEM BLOB,который обеспечивает импорт и экспорт стандартных байтовых ключей, закодированных ML-KEM декапсуляции на FIPS 203. Буфер pbOutput должен содержать структуру BCRYPT_MLKEM_KEY_BLOB , содержащую ключ декапсуляции KEM с кодировкой байтов, BCRYPT_MLKEM_PRIVATE_MAGIC и набор параметров ML-KEM. |
BCRYPT_MLKEM_PRIVATE_SEED_BLOB | BLOB — это ML-KEM BLOB, который обеспечивает импорт и экспорт семян ML-KEM на FIPS 203. Буфер pbOutput должен содержать структуру BCRYPT_MLKEM_KEY_BLOB , содержащую начальное значение KEM, BCRYPT_MLKEM_SEED_MAGIC и набор параметров ML-KEM. |
BCRYPT_OPAQUE_KEY_BLOB | Экспорт симметричного ключа в формате, относящееся к одному поставщику служб шифрования (CSP). Непрозрачные BLOB-объекты не переносимы и должны быть импортированы с помощью того же поставщика служб CSP, который создал БОЛЬШОЙ ДВОИЧНЫй объект. Непрозрачные BLOB-объекты предназначены только для межпроцессного передачи ключей и не подходят для сохранения и чтения в разных версиях поставщика. |
BCRYPT_PQDSA_PUBLIC_BLOB | BLOB — это BLOB-объект ML-DSA, SLH-DSA, LMS или BLOB-объект XMSS, который обеспечивает импорт и экспорт открытых ключей цифровой подписи PQ на FIPS 204 и 205. Буфер pbOutput должен содержать BCRYPT_PQDSA_KEY_BLOB структуру, содержащую ключевые материалы, открытые магии и набор параметров PQ. |
BCRYPT_PQDSA_PRIVATE_BLOB | BLOB — это BLOB-объект ML-DSA, SLH-DSA, LMS или BLOB-объект XMSS, который обеспечивает импорт и экспорт закрытых ключей цифровой подписи PQ на FIPS 204 и 205. Буфер pbOutput должен содержать BCRYPT_PQDSA_KEY_BLOB структуру, содержащую ключевой материал, частный магия и набор параметров PQ. |
BCRYPT_PQDSA_PRIVATE_SEED_BLOB | BLOB — это BLOB-объект ML-DSA, SLH-DSA, LMS или BLOB-объект XMSS, который обеспечивает импорт и экспорт частных семян цифровой подписи PQ на FIPS 204 и 205. Буфер pbOutput должен содержать BCRYPT_PQDSA_KEY_BLOB структуру, содержащую начальное значение, магию частного начального значения и набор параметров PQ. |
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
Набор флагов, изменяющих поведение этой функции. Для этой функции флаги не определены.
Этот параметр должен быть равен нулю для ключей ML-KEM.
Возвращаемое значение
Возвращает код состояния, указывающий на успешность или сбой функции.
Возможные коды возврата включают в себя, но не ограничиваются следующими.
Возвращаемый код | Описание |
---|---|
STATUS_SUCCESS | Функция была успешной. |
STATUS_BUFFER_TOO_SMALL | Размер, указанный параметром cbOutput , недостаточно велик для хранения зашифрованного текста. Если буфер pbOutput слишком мал, pcbResult получает количество байтов, необходимых для pbOutput. |
STATUS_INVALID_HANDLE | Дескриптор ключа в параметре hKey hKey недопустим. |
СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР | Один или несколько параметров недопустимы. |
STATUS_NOT_SUPPORTED | Указанный тип BLOB не поддерживается поставщиком. Если предоставленный дескриптор ключа не поддерживает экспорт частного начального значения. См. примечания. |
Замечания
Обратите внимание, что экспорт ML-KEM закрытого начального значения будет доступен только в том случае, если вызывающий объект использовал BCrypt для создания ключа или дескриптора был создан путем импорта частного начального значения.
В зависимости от того, какие режимы процессора поддерживает поставщик, 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 |