视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
用Crypto API进行加密通信及签名的一般步骤
2025-09-27 11:46:15 责编:小OO
文档
CSP开发基础--加密通信过程中CryptAPI函数的调用流程 

应用程序使用Crypto API进行加密通信的一般步骤如下: 

1,include wincrypt.h 

2,调用CryptAcquireContext()获得某个CSP模块中的密钥容器(key container)的一个句柄; 

3,发送方使用CryptImportKey()将接受方的证书导入CSP中,从而获得接收方的公钥; 

4,发送方式用CryptGenKey()随机产生一个会话密钥,且用对方的公钥对会话密钥进行加密,用CryptExportKey()将加密后的会话密钥导出并且发给对方; 

5,接收方收到会话密钥后,用自己的私钥调用CryptImportKey(),将会话密钥解出来; 

6,发送方用会话密钥调用CryptEncrypt()加密数据,并且发送给对方; 

7,接收方收到加密后的数据,用会话密钥调用CryptDecrypt(),对数据进行解密; 

8,通信完毕,调用CryptDestroyKey()释放任何密钥句柄,再用CryptReleaseContext()释放CSP句柄。 

使用Crypto API进行数字签名及验证的一般步骤如下: 

1,调用CryptAcquireContext()获得某个CSP模块中的密钥容器(key container)的一个句柄; 

2,签名者调用CryptGerUserKey()得到用于签名的密钥,并用CryptExportKey()降其中的公钥输出,以便收到数字签名的人对自己的签名进行验证; 

3,签名者用CryptCreateHash()和CryptHashData()计算需要签名的数据散列值; 

4,签名者用私钥调用CryptSignHash()给数据的散列值加上自己的签名; 

5,负责验证签名的人在收到签名者发来的公钥、数据及签名后,先用CryptImportKey()将签名者的公钥导入密钥容器中; 

6,验证者再签名者那样用CryptCreateHash()和CryptHashData()计算数据的散列值; 

7,验证者用CryptVerifySignature()检查签名是否有效; 

8,调用CryptDestroyHash()释放散列值对象,并调用CryptReleaseContext()释放最初的CSP句柄资源。下载本文

显示全文
专题