应用程序使用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加密通信流程的更多相关文章

  1. 转: https 加密通信流程

    https 加密通信流程当用户在浏览器中输入一个以https开头的网址时,便开启了浏览器与被访问站点之间的加密通信.下面我们以一个用户访问https://qbox.me为例,给读者展现一下SSL/TL ...

  2. Crypto++ AES 加密解密流程

    // aesdemo.cpp : 定义控制台应用程序的入口点. // #include <stdio.h>#include <tchar.h>#include <iost ...

  3. bugzilla4的xmlrpc接口api调用实现分享: xmlrpc + https + cookies + httpclient +bugzilla + java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能

    xmlrpc .  https . cookies . httpclient.bugzilla . java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能,网上针对bugzilla的实现很 ...

  4. 转 关于Https协议中的ssl加密解密流程

    关于Https协议中的ssl加密解密流程 2016年09月28日 09:51:15 阅读数:14809 转载自:http://www.cnblogs.com/P_Chou/archive/2010/1 ...

  5. 移动端与PHP服务端接口通信流程设计(增强版)

    前面讲过:移动端与PHP服务端接口通信流程设计(基础版) 对于 api_token 的校验,其安全性还可再增强: 增强地方一: 再增加2张表,一个接口表,一个授权表,设计参考如下: 接口表 字段名 字 ...

  6. https 通信流程和Charles 抓包原理

    1. https 通信流程 ①客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息.②服务器向客户端传送SSL 协议的版本 ...

  7. 移动端与PHP服务端接口通信流程设计(基础版)

    针对 --->非开放性平台 --->公司内部产品 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效: 2.因为是非开放性的,所以OAuth那套协议是行 ...

  8. 开源项目SMSS发开指南(五)——SSL/TLS加密通信详解(下)

    继上一篇介绍如何在多种语言之间使用SSL加密通信,今天我们关注Java端的证书创建以及支持SSL的NioSocket服务端开发.完整源码 一.创建keystore文件 网上大多数是通过jdk命令创建秘 ...

  9. HTTPS加密证书流程(2)

    目录 一:HTTPS加密证书流程 二:证书对比 三:自签证书 1.(lb服务器负载均衡代理) 2.(创建CA证书 创建密码) 3.生成自签证书(公钥),同时去掉私钥的密码(Enter) 四:证书内容解 ...

随机推荐

  1. mongo的insert和save比较

    insert仅仅是插入文档到集合中,如果记录不存在则插入,如果记录存在则忽略 save是在文档不存在时插入,存在时则是更新 下面代码不是为了演示insert和save的: foreach ($mens ...

  2. Python 文件读和写

  3. 判断js和css是否加载完成

    在通过ajax或者src动态获取js.css文件的时候,我们常常需要判断文件是否加载完成,以便进行进一步的操作,但是在检测js.css文件是否已经加载的策略上各浏览器并不统一,有很多坑,现在在这里总结 ...

  4. 初用Spring Test

    粗糙的研究了下Spring test,分享以下blog: 1. http://blog.csdn.net/shan9liang/article/details/40452469 2. http://w ...

  5. Segment Tree 分类: ACM TYPE 2014-08-29 13:04 97人阅读 评论(0) 收藏

    #include<iostream> #include<cstdio> using namespace std; struct node { int l, r, m; int ...

  6. share干什么的

    share到底干什么的 //--------------------打开GameServer,share中加载------------------------- .加载nBodyID //玩家的nBo ...

  7. HDU 5014Number Sequence

    思路: 对于一个二进制100011: 尽量将填满:填成111111: 然后有一个很好算的方法 gets(n)表示二进制下N有多少位,N^X=(111111)2 X=111111^N; 其实答案可以直接 ...

  8. unity资源(移动版)提取 一点尝试

    原地址:http://blog.csdn.net/delguoqing/article/details/22619711 最近在参与一款手游,需要制定美术制作规范.因为拿不准主意,所以决定参考其他游戏 ...

  9. 原 JS监听回车事件

    原 JS监听回车事件 发表于2年前(2014-06-04 10:16)   阅读(6101) | 评论(0) 11人收藏此文章, 我要收藏 赞0 1月16日厦门 OSC 源创会火热报名中,奖品多多哦  ...

  10. asp.net网站中添加百度地图功能

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...