Функция BCryptImportKey (bcrypt.h)

Функция BCryptImportKey импортирует симметричный ключ из большого двоичного объекта ключа. Функция BCryptImportKeyPair используется для импорта пары открытого и закрытого ключей.

Синтаксис

NTSTATUS BCryptImportKey(
  [in]            BCRYPT_ALG_HANDLE hAlgorithm,
  [in, optional]  BCRYPT_KEY_HANDLE hImportKey,
  [in]            LPCWSTR           pszBlobType,
  [out]           BCRYPT_KEY_HANDLE *phKey,
  [out, optional] PUCHAR            pbKeyObject,
  [in]            ULONG             cbKeyObject,
  [in]            PUCHAR            pbInput,
  [in]            ULONG             cbInput,
  [in]            ULONG             dwFlags
);

Параметры

[in] hAlgorithm

Дескриптор поставщика алгоритма для импорта ключа. Этот дескриптор получается путем вызова функции BCryptOpenAlgorithmProvider .

[in, optional] hImportKey

Дескриптор ключа шифрования ключа, необходимый для распаковки большого двоичного объекта ключа в параметре pbInput .

Примечание Дескриптор должен быть предоставлен тем же поставщиком, который предоставил импортируемый ключ.

 

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

[in] pszBlobType

Строка Юникода со значением NULL, содержащая идентификатор, указывающий тип БОЛЬШОГО ДВОИЧНОГО ОБЪЕКТА, содержащегося в буфере pbInput . Это может быть одно из следующих значений.

Значение Значение
BCRYPT_AES_WRAP_KEY_BLOB
Импорт симметричного ключа из большого двоичного объекта ключа AES. Параметр hImportKey должен ссылаться на допустимый BCRYPT_KEY_HANDLE указатель на ключ шифрования ключа.

Windows Server 2008 и Windows Vista: Этот тип BLOB не поддерживается.

BCRYPT_KEY_DATA_BLOB
Импорт симметричного ключа из большого двоичного объекта данных. Параметр pbInput является указателем на структуру BCRYPT_KEY_DATA_BLOB_HEADER , за которой сразу же следует ключ BLOB.
BCRYPT_OPAQUE_KEY_BLOB
Импортируйте большой двоичный объект с симметричным ключом в формате, специфичном для одного поставщика служб CSP. Непрозрачные BLOB-объекты не могут быть переданы и должны быть импортированы с помощью того же CSP, что и большой двоичный объект. Непрозрачные BLOB-объекты предназначены только для межпроцессной передачи ключей и не подходят для сохранения и чтения в разных версиях поставщика.

[out] phKey

Указатель на BCRYPT_KEY_HANDLE , получающий дескриптор импортированного ключа. Этот дескриптор используется в последующих функциях, которым требуется ключ, например BCryptEncrypt. Этот дескриптор должен быть освобожден, если он больше не нужен, передав его функции BCryptDeographyKey .

[out, optional] pbKeyObject

Указатель на буфер, получающий импортированный объект ключа. Параметр cbKeyObject содержит размер этого буфера. Требуемый размер этого буфера можно получить, вызвав функцию BCryptGetProperty для получения свойства BCRYPT_OBJECT_LENGTH . Это обеспечит размер ключевого объекта для указанного алгоритма.

Эта память может быть освобождена только после уничтожения дескриптора ключа phKey .

[in] cbKeyObject

Размер буфера pbKeyObject (в байтах).

[in] pbInput

Адрес буфера, содержащего blOB-объект ключа для импорта. Параметр cbInput содержит размер этого буфера. Параметр pszBlobType указывает тип большого двоичного объекта ключа, содержащегося в этом буфере.

[in] cbInput

Размер буфера pbInput (в байтах).

[in] dwFlags

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

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

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

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

Код возврата Описание
STATUS_SUCCESS
Функция выполнена успешно.
STATUS_BUFFER_TOO_SMALL
Размер объекта ключа, указанного параметром cbKeyObject , не достаточно велик для хранения объекта ключа.
STATUS_INVALID_HANDLE
Дескриптор алгоритма в параметре hAlgorithm недопустим .
STATUS_INVALID_PARAMETER
Один или несколько параметров недопустимы.
STATUS_NOT_SUPPORTED
Поставщик алгоритма, заданный параметром hAlgorithm , не поддерживает тип BLOB, заданный параметром pszBlobType .

Комментарии

В зависимости от того, какие режимы процессора поддерживает поставщик, BCryptImportKey можно вызывать либо из пользовательского режима, либо из режима ядра. Вызовы режима ядра могут выполняться в PASSIVE_LEVELIRQL или DISPATCH_LEVEL IRQL. Если текущий уровень IRQL DISPATCH_LEVEL, дескриптор, предоставленный в параметре hAlgorithm , должен быть открыт с помощью флага BCRYPT_PROV_DISPATCH , а все указатели, передаваемые в функцию BCryptImportKey , должны ссылаться на неупакованную (или заблокированную) память.

Чтобы вызвать эту функцию в режиме ядра, используйте файл 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

См. также раздел

BCryptDe переключение ключей

BCryptExportKey

BCryptImportKeyPair