BCryptCreateMultiHash 函数 (bcrypt.h)

BCryptCreateMultiHash 函数创建允许并行计算多个哈希操作的多哈希状态。 BCryptProcessMultiOperations 函数使用此多哈希状态。 可将多哈希状态视为哈希对象的数组,其中每个对象等效于 BCryptCreateHash 创建的哈希对象数组。

并行计算可以大大增加总体吞吐量,但代价是单个计算的延迟增加。

并行哈希计算目前仅适用于 SHA-256、SHA-384 和 SHA-512。 其他哈希算法可以与并行计算 API 一起使用,但它们以顺序哈希操作的吞吐量运行。 可从并行计算中获益的哈希算法集在将来的更新中可能会更改。

语法

NTSTATUS BCryptCreateMultiHash(
  BCRYPT_ALG_HANDLE  hAlgorithm,
  BCRYPT_HASH_HANDLE *phHash,
  ULONG              nHashes,
  PUCHAR             pbHashObject,
  ULONG              cbHashObject,
  PUCHAR             pbSecret,
  ULONG              cbSecret,
  ULONG              dwFlags
);

参数

hAlgorithm

BCRYPT_ALG_HANDLE[in, out]

用于多哈希数组中所有哈希状态的算法句柄。 算法句柄必须已打开, BCYRPT_MULTI_FLAG 传递给 BCryptOpenAlgorithmProvider 函数。 或者,调用方可以使用伪句柄。

phHash

BCRYPT_HASH_HANDLE* [out]

指向 BCRYPT_HASH_HANDLE 值的指针,该值接收表示多哈希状态的句柄。 此句柄用于后续操作,例如 BCryptProcessMultiOperations。 完成使用此句柄后,通过将其传递给 BCryptDestroyHash 函数来释放它。

nHashes

ULONG[in]

数组中的元素数。 此函数创建的多哈希状态能够对 nHashes 不同的哈希状态执行并行计算。

pbHashObject

PUCHAR[out]

指向接收多哈希状态的缓冲区的指针。

可以从BCRYPT_MULTI_OBJECT_LENGTH_STRUCT结构的 cbPerObjectcbPerElement 成员中计算大小。 该值如下: cbPerObject + (number of hash states) * cbPerElement

如果 pbHashObjectNULL ,而 cbHashObject 的值为零 (0) ,则会自动分配对象缓冲区。

cbHashObject

ULONG[in]

pbHashObject 缓冲区的大小;如果 pbHashObjectNULL,则为零 0 () 。

pbSecret

PUCHAR[in]

指向缓冲区的指针,该缓冲区包含要用于哈希或 MAC 的键。 cbSecret 参数包含此缓冲区的大小。 此键仅适用于 BCryptOpenAlgorithmProvider 函数通过使用 BCRYPT_ALG_HANDLE_HMAC 标志打开的哈希算法。 否则,请将此参数设置为 NULL

相同的键用于数组的所有元素。

cbSecret

ULONG[in]

pbSecret 缓冲区的大小(以字节为单位)。 如果未使用任何键,请将此参数设置为零, 0 () 。

dwFlags

ULONG[in]

修改函数行为的标志。 这可以是零,也可以是下面的值。 多哈希对象始终可重用,并且始终像传递 BCRYPT_HASH_REUSABLE_FLAG 一样运行。 为了保持一致性,此处支持此标志。

含义
BCRYPT_HASH_REUSABLE_FLAG 创建可重用的哈希对象。 对象可以在调用 BCryptFinishHash 后立即用于新的哈希操作。 有关详细信息,请参阅 使用 CNG 创建哈希

返回值

返回指示函数成功或失败的状态代码。 如果 方法成功,它将返回 STATUS_SUCCESS。 有关其他 NTSTATUS 值,请参阅 NTSTATUS 值

注解

在内部,并行哈希计算使用单指令多数据 (SIMD) 指令完成,一次最多可以进行 8 个并行计算,具体取决于可用的哈希算法和 CPU 功能。 为了最大限度地提高性能,建议调用方提供至少八个可以并行处理的计算。

对于长度不相等的计算,并行提供更多计算允许实现在 CPU 寄存器中更好地计划计算。 这可以提供吞吐量优势。 为了获得最佳吞吐量,建议调用方提供 8 到 100 个计算。 仅当所有哈希计算的长度都相同时,才选择该范围内的较低值。

HMAC-MD2、HMAC-MD4 和 GMAC 不支持多哈希。

要求

要求
最低受支持的客户端 Windows 8.1 更新 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2008 更新 [桌面应用 |UWP 应用]
目标平台 Windows
标头 bcrypt.h
Library Bcrypt.lib
DLL Bcrypt.dll

另请参阅

BCRYPT_MULTI_OBJECT_LENGTH

BCryptCreateHash

BCryptDestroyHash

BCryptFinishHash

BCryptHashData

BCryptOpenAlgorithmProvider

BCryptProcessMultiOperations

使用 CNG 创建哈希