注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mihooke's blog

IT之恋

 
 
 

日志

 
 

一个使用CryptoAPI的小demo  

2015-05-28 18:42:30|  分类: 证书相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

#include <stdio.h> 

#include <stdlib.h> 

#include <Windows.h> 

#include <WinCrypt.h>

int main() 

 HCRYPTPROV hPro; 

 HCRYPTKEY hKey; 

 if(CryptAcquireContext(&hPro, L"testsadada", NULL, PROV_RSA_FULL, 0)) 

  printf("获取句柄成功\n"); 

 else{ 

  if(!CryptAcquireContext(&hPro, L"testsadada", NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET)) 

   printf("创建失败\n"); 

 } 

 if(CryptGetUserKey(hPro, AT_SIGNATURE, &hKey))/*AT_SIGNATURE表示hKey是签名的密钥对 */

 printf("获取密钥成功\n"); 

 printf("%ld\n", hKey); 

 if(CryptGenKey(hPro, CALG_RSA_SIGN, CRYPT_EXPORTABLE, &hKey)) 

 printf("会话随机密钥获取成功\n"); 

 printf("%ld\n", hKey); 

 /*导出密钥给数字签名方进行验证 */

 DWORD BlobLen = 0; 

 if(CryptExportKey(hKey, NULL, PUBLICKEYBLOB, 0 , NULL, &BlobLen)) 

  printf("导出密钥成功\n"); 

 BYTE *keyBlob = (BYTE *)malloc(BlobLen); 

 if(CryptExportKey(hKey, NULL, PUBLICKEYBLOB, 0, keyBlob, &BlobLen)) 

  printf("导出密钥到blob\n"); 

 printf("%d\n", BlobLen); 

 HCRYPTHASH hHash; 

 if(CryptCreateHash(hPro, CALG_SHA1, 0, 0, &hHash)) 

  printf("创建hash对象成功\n"); 

 BYTE *hashBuff = (BYTE*)"a hash data string"; 

 DWORD hashBuffLen = strlen((char *)hashBuff)+1; 

 if(CryptHashData(hHash, hashBuff, hashBuffLen, 0)) 

  printf("计算hash值成功\n"); 

 DWORD signHashLen = 0; 

 if(CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, NULL, &signHashLen)) 

  printf("验证hash值长度\n"); 

 printf("%ld\n", signHashLen); 

 BYTE *signHash = (BYTE*)malloc(signHashLen); 

 if(CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, signHash, &signHashLen)) 

  printf("验证hash成功\n下面是验证值:\n"); 

 for (int i=0;i<hashBuffLen;i++) 

 { 

  printf("%2.2x", signHash[i]); 

 } 

 

 free(signHash); 

 free(keyBlob); 

 if(hHash) 

  CryptDestroyHash(hHash); 

 if(hPro) 

  CryptReleaseContext(hPro, 0); 

 system("pause"); 

}


  评论这张
 
阅读(66)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017