⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inituser.c

📁 利用哈希运算产生服务端和客户端的通信密钥
💻 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 + -