📄 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("哈希演示开始,首先产生一个会话密钥\n");
//--------------------------------------------------------------------
//获取默认CSP句柄
if(CryptAcquireContext(
&hCryptProv,
NULL,
NULL,
PROV_RSA_FULL,
0))
{
printf("CryptAcquireContext完成\n");
}
else
{
HandleError("上下文获取失败");
}
//--------------------------------------------------------------------
//产生哈希对象
if(CryptCreateHash(
hCryptProv,
CALG_MD5,
0,
0,
&hHash))
{
printf("已经产生一个空的哈希对象\n");
}
else
{
HandleError("调用CryptBeginHash函数失败!\n");
}
//--------------------------------------------------------------------
//产生随机会话密钥
if(CryptGenKey(
hCryptProv,
CALG_RC2,
CRYPT_EXPORTABLE,
&hKey))
{
printf("随机会话密钥已经产生\n");
}
else
{
HandleError("调用CryptGenKey失败!\n");
}
//--------------------------------------------------------------------
//在密钥对象上计算哈希值
if(CryptHashSessionKey(
hHash,
hKey,
0))
{
printf("会话密钥已经被哈希\n");
}
else
{
HandleError("调用CryptHashSessionKey失败!\n");
}
//销毁哈希对象
if(hHash)
CryptDestroyHash(hHash);
//销毁会话密钥
if(hKey)
CryptDestroyKey(hKey);
//释放CSP
if(hCryptProv)
CryptReleaseContext(hCryptProv,0);
printf("哈希会话密钥成功\n");
} // End of main
//错误处理函数
void HandleError(char *s)
{
printf("在运行程序时出现错误\n");
printf("%s\n",s);
printf("错误代号 %x\n.",GetLastError());
printf("程序终止运行\n");
exit(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -