CryptCreateHash

【勇芳软件工作室】汉化HomePreviousNext

[New - Windows NT]

[New - Windows 95, OEM Service Release 2]

CryptCreateHash功能用于启动数据流的散列。它向调用者返回CSP散列对象的句柄。该句柄也可用于后续调用CryptHashDataCryptHashSessionKey,以便对数据流和会话密钥进行散列。

BOOL CRYPTFUNC CryptCreateHash(

HCRYPTPROV【pbBuffer】, 
ALG_ID【寒冷的】, 
HCRYPTKEY【的hKeyru-Latn】, 
DWORD【dwFlags中】, 
HCRYPTHASH *【phHashzu】 
); 

参数

【pbBuffer】

[in] CSP使用的句柄。应用程序使用CryptAcquireContext函数获取此句柄。

【寒冷的】

[in]要使用的散列算法的算法标识符。

此参数的有效值将有所不同,具体取决于所使用的CSP。有关默认算法列表,请参见“备注”部分。

【的hKeyru-Latn】

[in]如果哈希算法的类型是密钥哈希,例如MAC算法,则该参数中应该传递哈希的密钥。对于非键算法,此参数应设置为零。

密钥必须是具有CBC密码模式的块密码,例如RC2。

【dwFlags中】

[in]标志值。此参数保留供将来使用,并且应始终为零。

【phHashzu】

[out]函数将该句柄复制到新的哈希对象的地址。

备注

Microsoft RSA基础提供程序定义了以下散列算法:

不变描述
CALG_MAC消息认证码
CALG_MD2MD2
CALG_MD5MD5
CALG_SHA美国DSA安全哈希算法

使用CryptHashDataCryptHashSessionKey功能完成实际散列的计算。这些需要一个哈希对象的句柄。一旦将所有数据添加到散列对象中,就可以执行以下操作之一:

*可以使用CryptGetHashParam检索哈希值。

*可以使用CryptDeriveKey导出会话密钥。

*哈希可以使用CryptSignHash签名。

*可以使用CryptVerifySignature验证签名。

一旦调用了这个列表中的一个函数,那么唯一可以使用相同散列句柄的散列函数就是CryptDestroyHash.

返回值

如果函数成功,返回值不为零。

如果函数失败,返回值为零。要检索扩展错误信息,请使用GetLastError功能。

下表列出了GetLastError函数最常返回的错误代码。由“NTE”开头的错误代码由您使用的特定CSP生成。

错误描述
ERROR_INVALID_HANDLE其中一个参数指定一个无效句柄。
ERROR_INVALID_PARAMETER其中一个参数包含无效值。这通常是一个非法的指针。
ERROR_NOT_ENOUGH_MEMORY操作过程中操作系统内存不足。
NTE_BAD_ALGID【寒冷的】参数指定此CSP不支持的算法。
NTE_BAD_FLAGS【dwFlags中】参数不为零。
NTE_BAD_KEY密钥哈希算法(如CALG_MAC)由【寒冷的】指定,【的hKeyru-Latn】参数为零或指定无效的密钥句柄。如果密钥是流密码,或者密码模式是除CBC以外的任何一个,则还将返回此错误代码。
NTE_NO_MEMORYCSP在运行过程中耗尽了内存。

请参阅CryptSignHash功能中的“示例”部分。

也可以看看

CryptAcquireContext, CryptDeriveKey, CryptDestroyHash, CryptGetHashParam, CryptHashData, CryptHashSessionKey, CryptSignHash, CryptVerifySignature