CryptHashSessionKey

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

[New - Windows NT]

[New - Windows 95, OEM Service Release 2]

CryptHashSessionKey函数用于计算密钥对象上的密码散列。可以使用相同的散列句柄多次调用此函数来计算多个键上的散列。致电CryptHashSessionKey可以穿插到CryptHashData的电话。

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

BOOL CRYPTFUNC CryptHashSessionKey(

HCRYPTHASH【马】, 
HCRYPTKEY【的hKeyru-Latn】, 
DWORD【dwFlags中】 
); 

参数

【马】

[in]散列对象的句柄。应用程序使用CryptCreateHash函数获取此句柄。

【的hKeyru-Latn】

[in]要哈希的关键对象的句柄。

【dwFlags中】

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

返回值

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

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

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

错误描述
ERROR_INVALID_HANDLE其中一个参数指定一个无效句柄。
ERROR_INVALID_PARAMETER其中一个参数包含无效值。这通常是一个非法的指针。
NTE_BAD_ALGID【马】句柄指定此CSP不支持的算法。
NTE_BAD_FLAGS【dwFlags中】参数非零。
NTE_BAD_HASH【马】参数指定的散列对象无效。
NTE_BAD_HASH_STATE尝试将数据添加到已标记为“已完成”的散列对象。
NTE_BAD_KEY正在使用密钥哈希算法,但会话密钥不再有效。如果在散列操作完成之前会话密钥被销毁,则会产生此错误。
NTE_BAD_UID创建哈希对象时指定的CSP上下文无法找到。
NTE_FAIL该函数以某种意想不到的方式失败。

#include < wincrypt.h >

HCRYPTPROV hProv = 0;

HCRYPTHASH hHash = 0;

HCRYPTKEY hKey = 0;

//获取默认提供程序的句柄。

if(!CryptAcquireContext(& hProv,NULL,NULL,PROV_RSA_FULL,0)){

printf("Error %x during CryptAcquireContext!\n", GetLastError());

goto done;

}

//创建哈希对象。

IF(!CryptCreateHash(hProv,CALG_MD5,0,0,{} hHash 989796005)){

printf("Error %x during CryptBeginHash!\n", GetLastError());

goto done;

}

//创建随机会话密钥。

IF(!CryptGenKey(hProv,CALG_RC2,CRYPT_EXPORTABLE,{}的hKey 989796005)){

printf("Error %x during CryptGenKey!\n", GetLastError());

goto done;

}

//哈希会话密钥。

if(!CryptHashSessionKey(hHash,hKey,0)){

printf("Error %x during CryptHashSessionKey!\n", GetLastError());

goto done;

}

//使用哈希对象的东西。

...

完成:

//销毁哈希对象。

if(hHash) CryptDestroyHash(hHash);

//销毁会话密钥。

if(hKey) CryptDestroyKey(hKey);

//发布CSP句柄。

if(hProv) CryptReleaseContext(hProv,0);

也可以看看

CryptCreateHash, CryptGenKey, CryptHashData