CSP应用开发-加密通信及数字签名中CryptApi的调用流程
来源:互联网 发布:mac地址软件下载 编辑:程序博客网 时间:2024/05/16 04:14
一、应用程序使用Crypto API进行加密通信的一般步骤如下:
1,添加头文件windows.h、wincrypt.h
2,调用CryptAcquireContext()获得某个CSP模块中的密钥容器(key container)的一个句柄;
3,发送方使用CryptImportKey()将接受方的证书导入CSP中,从而获得接收方的公钥;
4,发送方式用CryptGenKey()随机产生一个会话密钥,且用对方的公钥对会话密钥进行加密,用CryptExportKey()将加密后的会话密钥导出并且发给对方;
5,接收方收到会话密钥后,用自己的私钥调用CryptImportKey(),将会话密钥解出来;
6,发送方用会话密钥调用CryptEncrypt()加密数据,并且发送给对方;
7,接收方收到加密后的数据,用会话密钥调用CryptDecrypt(),对数据进行解密;
8,通信完毕,调用CryptDestroyKey()释放任何密钥句柄,再用CryptReleaseContext()释放CSP句柄。
对称加密参考博文:http://blog.csdn.net/anda0109/article/details/50011273
二、使用Crypto API进行数字签名及验证的一般步骤如下:
1,调用CryptAcquireContext()获得某个CSP模块中的密钥容器(key container)的一个句柄;
2,签名者调用CryptGetUserKey()得到用于签名的密钥,并用CryptExportKey()将其中的公钥输出,以便收到数字签名的人对自己的签名进行验证;
3,签名者用CryptCreateHash()和CryptHashData()计算需要签名的数据散列值;
4,签名者用私钥调用CryptSignHash()给数据的散列值加上自己的签名;
5,负责验证签名的人在收到签名者发来的公钥、数据及签名后,先用CryptImportKey()将签名者的公钥导入密钥容器中;
6,验证者再签名者那样用CryptCreateHash()和CryptHashData()计算数据的散列值;
7,验证者用CryptVerifySignature()检查签名是否有效;
8,调用CryptDestroyKey()释放密钥,CryptDestroyHash()释放散列值对象,并调用CryptReleaseContext()释放的CSP句柄资源。
签名验签流程参考博文:http://blog.csdn.net/anda0109/article/details/50011281
- CSP应用开发-加密通信及数字签名中CryptApi的调用流程
- CSP开发基础--加密通信过程中CryptAPI函数的调用流程
- CSP开发基础--加密通信过程中CryptAPI函数的调用流程
- CSP开发基础--加密通信过程中CryptAPI函数的调用流程
- CSP开发基础--加密通信过程中CryptAPI函数的调用流程
- CSP应用开发-CryptAPI解析X509及PKCS#12证书
- CSP应用开发-CryptAPI函数库介绍
- CSP编程基础--CryptAPI使用过程中碰到的问题
- CSP编程基础--CryptAPI使用过程中碰到的问题
- CSP编程基础--CryptAPI使用过程中碰到的问题
- 加密与数字签名的流程
- CryptAPI对称加密的例子
- CSP开发基础--CryptAPI解析X509证书PKCS#12证书
- CSP开发基础--CryptAPI解析X509证书PKCS#12证书
- 数字签名是什么?https加密通信的理解。
- CSP开发流程
- CSP开发流程
- CSP开发流程
- HBase Shell工具操作HBase
- NodeJs概述
- nginx日志access.log error.log按天生成存储,定时删除日志
- Spring IOC详细用法
- Apache Tiles的基本使用
- CSP应用开发-加密通信及数字签名中CryptApi的调用流程
- Docker安装CentOS遇到的问题
- SpringMVC、SpringMVC XML配置(纯XML方式)
- 跨域解决方法
- Enumeration遍历http请求参数的一个例子
- 解决数据库慢的方法论
- Hashing Table
- sip路由机制示例
- [RMAN]使用RMAN备份将数据库不完全恢复到指定时间点