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

Функция BCryptCreateHash вызывается для создания объекта хэша или кода проверки подлинности сообщений (MAC).

Синтаксис

NTSTATUS BCryptCreateHash(
  [in, out]      BCRYPT_ALG_HANDLE  hAlgorithm,
  [out]          BCRYPT_HASH_HANDLE *phHash,
  [out]          PUCHAR             pbHashObject,
  [in, optional] ULONG              cbHashObject,
  [in, optional] PUCHAR             pbSecret,
  [in]           ULONG              cbSecret,
  [in]           ULONG              dwFlags
);

Параметры

[in, out] hAlgorithm

Дескриптор поставщика алгоритмов, созданный с помощью функции BCryptOpenAlgorithmProvider. Алгоритм, указанный при создании поставщика, должен поддерживать хэш-интерфейс.

[out] phHash

Указатель на значение BCRYPT_HASH_HANDLE, которое получает дескриптор, представляющий хэш-объект или объект MAC. Этот дескриптор используется в последующих хэшированиях или mac-функциях, таких как функция BCryptHashData. Завершив использование этого дескриптора, отпустите его, передав его в функцию BCryptDeskHash.

[out] pbHashObject

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

Эта память может быть освобождена только после удаления дескриптора, на который указывает параметр phHash.

Если значение этого параметра равно null, а значение параметра cbHashObject равно нулю, память для хэш-объекта выделяется и освобождается этой функцией. Windows 7: эта функция управления памятью доступна начиная с Windows 7.

[in, optional] cbHashObject

Размер в байтах буфера pbHashObject.

Если значение этого параметра равно нулю, а значение параметра pbHashObject равно NULL, память для ключевого объекта выделяется и освобождается этой функцией. Windows 7: эта функция управления памятью доступна начиная с Windows 7.

[in, optional] pbSecret

Указатель на буфер, содержащий ключ, используемый для хэша или MAC. Параметр cbSecret содержит размер этого буфера. Этот ключ применяется только к хэш-алгоритмам, открытым функцией BCryptOpenAlgorithmProvider с помощью флага BCRYPT_ALG_HANDLE_HMAC_FLAG . В противном случае задайте для этого параметра значение NULL.

[in] cbSecret

Размер в байтах буфера pbSecret. Если ключ не используется, установите этот параметр равным нулю.

[in] dwFlags

Флаги, изменяющие поведение функции. Это может быть ноль или следующее значение.

Ценность Значение
BCRYPT_HASH_REUSABLE_FLAG
Создает повторно используемый хэш-объект. Объект можно использовать для новой операции хэширования сразу после вызова BCryptFinishHash. Дополнительные сведения см. в статье Создание хэша с помощьюCNG.

Windows Server 2008 R2, Windows 7, Windows Server 2008 и Windows Vista: Этот флаг не поддерживается.

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

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

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

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

Замечания

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

Чтобы вызвать эту функцию в режиме ядра, используйте Cng.lib, которая входит в состав пакета средств разработки драйверов (DDK). Дополнительные сведения см. в средств разработки и WDK.Windows Server 2008 и Windows Vista: Чтобы вызвать эту функцию в режиме ядра, используйте Ksecdd.lib.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows Vista [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2008 [классические приложения | Приложения UWP]
целевая платформа Виндоус
заголовка bcrypt.h
библиотеки Bcrypt.lib
DLL Bcrypt.dll

См. также

BCryptDeskHash