Crypto API加密通信流程
应用程序使用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句柄资源。
Crypto API加密通信流程的更多相关文章
- 转: https 加密通信流程
https 加密通信流程当用户在浏览器中输入一个以https开头的网址时,便开启了浏览器与被访问站点之间的加密通信.下面我们以一个用户访问https://qbox.me为例,给读者展现一下SSL/TL ...
- Crypto++ AES 加密解密流程
// aesdemo.cpp : 定义控制台应用程序的入口点. // #include <stdio.h>#include <tchar.h>#include <iost ...
- bugzilla4的xmlrpc接口api调用实现分享: xmlrpc + https + cookies + httpclient +bugzilla + java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能
xmlrpc . https . cookies . httpclient.bugzilla . java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能,网上针对bugzilla的实现很 ...
- 转 关于Https协议中的ssl加密解密流程
关于Https协议中的ssl加密解密流程 2016年09月28日 09:51:15 阅读数:14809 转载自:http://www.cnblogs.com/P_Chou/archive/2010/1 ...
- 移动端与PHP服务端接口通信流程设计(增强版)
前面讲过:移动端与PHP服务端接口通信流程设计(基础版) 对于 api_token 的校验,其安全性还可再增强: 增强地方一: 再增加2张表,一个接口表,一个授权表,设计参考如下: 接口表 字段名 字 ...
- https 通信流程和Charles 抓包原理
1. https 通信流程 ①客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息.②服务器向客户端传送SSL 协议的版本 ...
- 移动端与PHP服务端接口通信流程设计(基础版)
针对 --->非开放性平台 --->公司内部产品 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效: 2.因为是非开放性的,所以OAuth那套协议是行 ...
- 开源项目SMSS发开指南(五)——SSL/TLS加密通信详解(下)
继上一篇介绍如何在多种语言之间使用SSL加密通信,今天我们关注Java端的证书创建以及支持SSL的NioSocket服务端开发.完整源码 一.创建keystore文件 网上大多数是通过jdk命令创建秘 ...
- HTTPS加密证书流程(2)
目录 一:HTTPS加密证书流程 二:证书对比 三:自签证书 1.(lb服务器负载均衡代理) 2.(创建CA证书 创建密码) 3.生成自签证书(公钥),同时去掉私钥的密码(Enter) 四:证书内容解 ...
随机推荐
- VC6.0装了visual assist x回车键不能补全代码的解决方法
问题:VC6.0装了visual assist x补全代码具体怎么用? 输入字母后会像输入法那样出现一个菜单 但是怎么选择菜单里面的内容呢? 什么 回车 ...
- Invalid object name ‘sys.configurations’. (Microsoft SQL Server, Error: 208)
http://blogs.msdn.com/b/ramaprasanna/archive/2009/09/16/invalid-object-name-sys-configurations-micro ...
- PHP去除数组中重复数据的两个例子
例一: <?php$input = array("a" => "green","", "red"," ...
- POJ 2960 博弈论
题目链接: http://poj.org/problem?id=2960 S-Nim Time Limit: 2000MS Memory Limit: 65536K 问题描述 Arthur and h ...
- hdu 3879 Base Station 最大权闭合图
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3879 A famous mobile communication company is plannin ...
- UIResponder类
UIResponder类 UIResponder类是所有视图类的父类,包括UIView, UIApplication, UIWindow. UIResponder类定义了一些响应和处理事件的方法.事件 ...
- MAC下搭建web开发环境
具体做法,参照此链接:http://mallinson.ca/osx-web-development/ Mac系统本身自带apache和PHP,MySQL可以安装也可以不安装 web开发的IDE可以是 ...
- PHP命令行模式基本介绍
首先要保证php在cli模式下可用,php –v会返回PHP的版本号. [gaojian3@log001 ~]$ php -v PHP (cli) (built: Aug ::) Copyrigh ...
- PHP-Java-Bridge的使用(平安银行支付功能专版)
去年做平安银行的时候,用到了PHP-Java-Bridge,后来写了一篇博客记录使用PHP-Java-Bridge的一些心得(连接:http://my.oschina.net/kenblog/blog ...
- 机器学习在 IT 运维管理中的必要性!
机器学习技术在监控工具中的应用已经成为 IT 运维与 DevOps 团队的一大热点话题.尽管相关的使用案例很多,对 IT 团队而已真正的「杀手级应用」是机器学习如何提高实时事件管理能力,从而帮助较大规 ...