?? inituser.c
字號:
//hashkey.c 對會話密鑰進行哈希運算
#include <stdio.h>
#include <windows.h>
#include <wincrypt.h>
#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)
void HandleError(char *s);
void main()
{
//變量聲明
HCRYPTPROV hCryptProv;
HCRYPTHASH hHash;
HCRYPTKEY hKey;
printf("哈希演示開始,首先產(chǎn)生一個會話密鑰\n");
//--------------------------------------------------------------------
//獲取默認CSP句柄
if(CryptAcquireContext(
&hCryptProv,
NULL,
NULL,
PROV_RSA_FULL,
0))
{
printf("CryptAcquireContext完成\n");
}
else
{
HandleError("上下文獲取失敗");
}
//--------------------------------------------------------------------
//產(chǎn)生哈希對象
if(CryptCreateHash(
hCryptProv,
CALG_MD5,
0,
0,
&hHash))
{
printf("已經(jīng)產(chǎn)生一個空的哈希對象\n");
}
else
{
HandleError("調(diào)用CryptBeginHash函數(shù)失敗!\n");
}
//--------------------------------------------------------------------
//產(chǎn)生隨機會話密鑰
if(CryptGenKey(
hCryptProv,
CALG_RC2,
CRYPT_EXPORTABLE,
&hKey))
{
printf("隨機會話密鑰已經(jīng)產(chǎn)生\n");
}
else
{
HandleError("調(diào)用CryptGenKey失敗!\n");
}
//--------------------------------------------------------------------
//在密鑰對象上計算哈希值
if(CryptHashSessionKey(
hHash,
hKey,
0))
{
printf("會話密鑰已經(jīng)被哈希\n");
}
else
{
HandleError("調(diào)用CryptHashSessionKey失敗!\n");
}
//銷毀哈希對象
if(hHash)
CryptDestroyHash(hHash);
//銷毀會話密鑰
if(hKey)
CryptDestroyKey(hKey);
//釋放CSP
if(hCryptProv)
CryptReleaseContext(hCryptProv,0);
printf("哈希會話密鑰成功\n");
} // End of main
//錯誤處理函數(shù)
void HandleError(char *s)
{
printf("在運行程序時出現(xiàn)錯誤\n");
printf("%s\n",s);
printf("錯誤代號 %x\n.",GetLastError());
printf("程序終止運行\(zhòng)n");
exit(1);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -