飞天诚信中 一个usbkey进行签名,另一个usbkey进行签名验证

这段代码展示了如何利用飞天诚信的ePassNG RSA Cryptographic Service Provider进行数字签名和验证操作。代码首先获取CSP上下文,然后使用指定的密钥容器生成签名,并进行签名验证。整个过程包括了哈希计算、签名生成和验证等步骤。
摘要由CSDN通过智能技术生成

飞天诚信usbkey中签名与验证的示例代码,前提是一个usbkey中有一对公私钥对,另一个usbkey中也有一对公私钥对. 这里都没有通过证书验证的

#include "stdafx.h"


#define TEST_CSP_NAME "FEITIAN ePassNG RSA Cryptographic Service Provider"
#define KEY_CA_CONTAINER "CSPKeyTest"


void HandleError(char *s)
{
    fprintf(stderr,"An error occurred in running the program. \n");
    fprintf(stderr,"%s\n",s);
    fprintf(stderr, "Error number %x.\n", GetLastError());
    fprintf(stderr, "Program terminating. \n");
    exit(1);
} // End of HandleError


void sign( BYTE* pbBuffer, BYTE** Signature, DWORD* SigLen)
{
HCRYPTPROV  hCryptProv = 0;
HCRYPTHASH hHash;

DWORD dwBufferLen = strlen((char *)pbBuffer)+1;
LPTSTR szDescription = "Test Data Description";
DWORD dwSigLen;

    // To initialize the ePassNG CSP
if(CryptAcquireContext(
&hCryptProv,        
KEY_CA_CONTAINER,
TEST_CSP_NAME,
PROV_RSA_FULL,      
CRYPT_NEWKEYSET))
{
printf("ePassNG CSP has been acquired. \n");
}
else if (GetLastError() == NTE_EXISTS)
{
if(CryptAcquireContext(
&hCryptProv,        
KEY_CA_CONTAINER,
TEST_CSP_NAME,
PROV_RSA_FULL,      
0))
{
printf("ePassNG CSP has been opened. \n");
}
else
{
HandleError("CryptAcquireContext failed.");
}
}
else
{
HandleError("CryptAcquireContext failed.");
}


    
// 从密钥容器中取数字签名用的密钥
HCRYPTKEY hKey = 0;


if(CryptGetUserKey(   
hCryptProv,    
AT_SIGNATURE,    
&hKey)) 
{
printf("The signature key has been acquired. \n");
}
else
{
if(GetLastError() == NTE_NO_KEY) //密钥容器里不存在signature key pair创建之
{
if(CryptGenKey(
hCryptProv, //CSP句柄
AT_SIGNATURE, //创建的密钥对类型为signature key pair
0, //key类型,这里用默认值
&hKey)) //创建成功返回新创建的密钥对的句柄
{
printf("Created a signature key pair.\n");
}
else

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值