CryptHashData 函数 (wincrypt.h)

重要 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft 可能会在将来的版本中删除此 API。
 
CryptHashData 函数将数据添加到指定的哈希对象。 可以多次调用此函数和 CryptHashSessionKey 来计算长数据流或不连续数据流的哈希。

在调用此函数之前,必须调用 CryptCreateHash 来创建哈希对象的句柄。

语法

BOOL CryptHashData(
  [in] HCRYPTHASH hHash,
  [in] const BYTE *pbData,
  [in] DWORD      dwDataLen,
  [in] DWORD      dwFlags
);

参数

[in] hHash

哈希对象的句柄。

[in] pbData

指向缓冲区的指针,该缓冲区包含要添加到哈希对象中的数据。

[in] dwDataLen

要添加的数据的字节数。 如果设置了CRYPT_USERDATA标志,则此值必须为零。

[in] dwFlags

定义了以下标志值。

含义
CRYPT_OWF_REPL_LM_HASH
0x00000001
未使用此标志。
CRYPT_USERDATA
1 (0x1)
所有 Microsoft 加密提供程序都忽略此参数。 对于任何不忽略此参数的 CSP,如果设置了此标志,CSP 将提示用户直接输入数据。 此数据将添加到哈希中。 不允许应用程序访问数据。 此标志可用于允许用户在系统中输入 PIN。

返回值

如果函数成功,则返回值为 TRUE

如果函数失败,则返回值为 FALSE。 有关扩展的错误信息,请调用 GetLastError

“NTE”开头的错误代码由你使用的特定 CSP 生成。 一些可能的错误代码随之而来。

返回代码 说明
ERROR_INVALID_HANDLE
其中一个参数指定无效的句柄。
ERROR_INVALID_PARAMETER
其中一个参数包含无效的值。 这通常是无效的指针。
NTE_BAD_ALGID
hHash 句柄指定此 CSP 不支持的算法。
NTE_BAD_FLAGS
dwFlags 参数包含无效的值。
NTE_BAD_HASH
hHash 参数指定的哈希对象无效。
NTE_BAD_HASH_STATE
尝试将数据添加到已标记为“已完成”的哈希对象。
NTE_BAD_KEY
正在使用键控哈希算法,但会话密钥不再有效。 如果在哈希操作完成之前销毁会话密钥,则会生成此错误。
NTE_BAD_LEN
CSP 不会忽略 CRYPT_USERDATA 标志,该标志已设置, 并且 dwDataLen 参数具有非零值。
NTE_BAD_UID
找不到创建哈希对象时指定的 CSP 上下文。
NTE_FAIL
函数以某种意外方式失败。
NTE_NO_MEMORY
CSP 在操作期间内存不足。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 wincrypt.h
Library Advapi32.lib
DLL Advapi32.dll

另请参阅

CryptCreateHash

CryptHashSessionKey

CryptSignHash

哈希和数字签名函数