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


Функция NCryptEncrypt (ncrypt.h)

Функция NCryptEncrypt шифрует блок данных.

Синтаксис

SECURITY_STATUS NCryptEncrypt(
  [in]           NCRYPT_KEY_HANDLE hKey,
  [in]           PBYTE             pbInput,
  [in]           DWORD             cbInput,
  [in, optional] VOID              *pPaddingInfo,
  [out]          PBYTE             pbOutput,
  [in]           DWORD             cbOutput,
  [out]          DWORD             *pcbResult,
  [in]           DWORD             dwFlags
);

Параметры

[in] hKey

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

[in] pbInput

Адрес буфера, содержащего данные для шифрования. Параметр cbInput содержит размер данных для шифрования. Дополнительные сведения см. в подразделе "Примечания".

[in] cbInput

Число байтов в буфере pbInput для шифрования.

[in, optional] pPaddingInfo

Указатель на структуру, содержащую сведения о заполнении. Фактический тип структуры, на который указывает этот параметр, зависит от значения параметра dwFlags . Этот параметр используется только с асимметричными ключами и в противном случае должен иметь значение NULL .

[out] pbOutput

Адрес буфера, который будет получать зашифрованные данные, созданные этой функцией. Параметр cbOutput содержит размер этого буфера. Дополнительные сведения см. в подразделе "Примечания".

Если этот параметр имеет значение NULL, эта функция вычислит размер, необходимый для зашифрованных данных, и вернет размер в расположении, на который указывает параметр pcbResult .

[in] cbOutput

Размер буфера pbOutput (в байтах). Этот параметр игнорируется, если параметр pbOutput имеет значение NULL.

[out] pcbResult

Указатель на переменную DWORD , которая получает количество байтов, скопированных в буфер pbOutput . Если pbOutput имеет значение NULL, он получает размер в байтах, необходимый для зашифрованного текста.

[in] dwFlags

Флаги, изменяющие поведение функции. Допустимый набор флагов зависит от типа ключа, указанного параметром hKey .

Если ключ является асимметричным, это может быть одно из следующих значений.

Значение Значение
NCRYPT_NO_PADDING_FLAG
Не используйте заполнение. Параметр pPaddingInfo не используется.

Если указать NCRYPT_NO_PADDING_FLAG, функция NCryptEncrypt шифрует только первые N битов, где N — это длина ключа, переданного в качестве параметра hKey . Все биты после первых N битов игнорируются.

NCRYPT_PAD_OAEP_FLAG
Используйте схему Оптимальное заполнение асимметричного шифрования (OAEP). Параметр pPaddingInfo является указателем на структуру BCRYPT_OAEP_PADDING_INFO .
NCRYPT_PAD_PKCS1_FLAG
Данные будут заполнены случайным числом для округления размера блока. Параметр pPaddingInfo не используется.
NCRYPT_SILENT_FLAG
Запрашивает, чтобы поставщик служб ключей (KSP) не отображал пользовательский интерфейс. Если поставщик должен отображать пользовательский интерфейс для работы, вызов завершается сбоем, а KSP должен задать код ошибки NTE_SILENT_CONTEXT как последнюю ошибку.

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

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

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

Код возврата Описание
ERROR_SUCCESS
Функция выполнена успешно.
NTE_BAD_FLAGS
Параметр dwFlags содержит недопустимое значение.
NTE_BAD_KEY_STATE
Ключ, определенный параметром hKey , не был завершен или является неполным.
NTE_BUFFER_TOO_SMALL
Размер, заданный параметром cbOutput , недостаточно велик для хранения зашифрованных данных.
NTE_INVALID_HANDLE
Недопустимый параметр hKey .
NTE_INVALID_PARAMETER
Один или несколько параметров недопустимы.

Комментарии

Параметры pbInput и pbOutput могут указывать на один и тот же буфер. В этом случае эта функция выполняет шифрование на месте. Возможно, размер зашифрованных данных будет больше, чем размер незашифрованных данных, поэтому буфер должен быть достаточно большим для хранения зашифрованных данных.

Служба не должна вызывать эту функцию из функции StartService. Если служба вызывает эту функцию из функции StartService, может возникнуть взаимоблокировка, и служба может перестать отвечать.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header ncrypt.h
Библиотека Ncrypt.lib
DLL Ncrypt.dll