网络传递加密数据 

虽然不对称加密解决了用对称加密传递消息必须传递密钥的问题,但是由于不对称加密无法使用流进行处理,因此与对称加密相比效率较低,不适用于加密大量数据的场合。在实际应用中,一般将两种加密方法配合使用。其基本思想是:用不对称加密算法加密对称加密算法的密钥,用对称加密算法加密实际数据。

具体设计思路可以简单描述为:A和B相互传递加密的数据前,B首先生成一个不对称加密算法使用的公钥/私钥对,假定公钥为publicKey,私钥为privateKey,然后B将公钥publicKey通过网络传递给A;A接收到此公钥后,根据此公钥初始化不对称加密对象,并用此对象加密使用对称加密算法的密钥key,并将加密后的密钥key通过网络传递给B;这样,A和B都有了一个共同使用的对称加密的密钥,然后双方用此密钥加密数据,并将加密后的数据传递给对方,对方收到加密后的数据后,再用密钥key解密数据。

下面通过一个例子说明具体的实现方法

客户端

客户端发送 

//使用默认密钥创建对称加密对象
TripleDESCryptoServiceProvider   tdes = new TripleDESCryptoServiceProvider();
 //使用默认密钥创建不对称加密对象
RSACryptoServiceProvider  rsa = new RSACryptoServiceProvider();
//导出不对称加密密钥的xml表示形式,false表示不包括私钥
string rsaPublicKey = rsa.ToXmlString(false);
//将导出的公钥发送到服务器,公钥可以对任何人公开
 SendData("rsaPublicKey,true", Encoding.Default.GetBytes(rsaPublicKey));

客户端接收
case "tdesKey":
//解密
tdes.Key = rsa.Decrypt(receiveBytes, false);//Rsa解密Key
break;
case "tdesIV":
//解密
tdes.IV = rsa.Decrypt(receiveBytes, false);//Rsa解密IV
break;
case "Talk":
//解密
string talkString = DecryptText(receiveBytes, tdes.Key, tdes.IV);用对称解密获取解密后数据

服务端接收 

case "rsaPublicKey":
//使用传递过来的公钥重新初始化该客户端对
//应的RSACryptoServiceProvider对象,
//然后就可以使用这个对象加密对称加密的私钥了
user.rsa.FromXmlString(Encoding.Default.GetString(receiveBytes));
//加密对称加密的私钥
try
{
//使用RSA算法加密对称加密算法的私钥Key
byte[] encryptedKey = user.rsa.Encrypt(user.tdes.Key, false);
SendToClient(user, "tdesKey,true", encryptedKey);
//加密IV
byte[] encryptedIV = user.rsa.Encrypt(user.tdes.IV, false);
SendToClient(user, "tdesIV,true", encryptedIV);
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
break;
case "Talk":
//解密
string talkString = DecryptText(receiveBytes, user.tdes.Key, user.tdes.IV);//对称加密数据
break;

Hash算法与数字签名 

用HASH算法加密的提供方法有MD5,SHA等,

Hash算法具有如下特点:
1) 散列效果好。即使原始数据只发生一个小小的改动,数据的散列也会发生非常大的变化。假如两个单词非常相似,比如只有一个字母不同,使用Hash算法得到的结果也相差甚远。甚至根本看不出二者之间有什么相似之处。
2) 散列函数不可逆。即不可能从散列结果推导出原始数据。(MD5,SHA等不可逆)
3) 对不同的数据进行Hash运算不可能生成相同的Hash值。
Hash算法的用途主要有两大类:一类是将Hash值作为消息身份验证代码(MAC,Message Authentication Code),用于和数字签名一起实现对消息数据进行身份验证;另一类是将Hash值作为消息检测代码(MDC,Message Detection Code),用于检测数据完整性。
在应用程序中,可以利用数字签名实现数据身份验证和数据完整性验证。数据身份验证是为了验证数据是不是持有私钥的人发送的;数据完整性验证则用于验证数据在传输过程中是否被修改过。
验证数据完整性的实现原理是:发送方先使用Hash算法对数据进行Hash运算得到数据的Hash值,然后将数据和Hash值一块儿发送给接收方;接收方接收到数据和Hash值后,对接收的数据进行和发送方相同的Hash运算,然后将计算得到的Hash值和接收的Hash值进行比较,如果二者一致,说明收到的数据肯定与发送方发送的原始数据相同,从而说明数据是完整的。 

byte[] HashVal = new MD5CryptoServiceProvider().ComputeHash(dataToEncrypt);产生hash值,然后对比是否相等来判断.

转载于:https://www.cnblogs.com/fujinliang/archive/2012/07/03/2574099.html

简单网络传递加密数据相关推荐

  1. java之通信之初接触之小感,附上及其简单网络画板的代码

    通信,指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递,从广义上指需要信息的双方或多方在不违背各自意愿的情况下无论采用何种方法,使用何种媒质,将信息从某方准确安全传送到另方.[百科释义] ...

  2. python爬虫简单实例-Python 利用Python编写简单网络爬虫实例3

    利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站"http://bbs.51tes ...

  3. 简单网络聊天程序java_基于Java实现hello/hi简单网络聊天程序

    Socket简要阐述 Socket的概念 Socket的英文原义是"孔"或"插座". 在网络编程中,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连 ...

  4. Http网络传递参数中文乱码问题解决办法

    目录(?) [-] 我们通过Http连接网络传递中文参数时经常遇到乱码问题乱码问题一般是客户端和服务端编码方式不一至造成的 首先统一客户端和服务端的编解码方式为UTF-8 我们通过Http连接网络传递 ...

  5. eNSP模拟简单网络环境

    eNSP模拟简单网络环境 实验环境 用ensp搭建图中拓扑,其中cloud1所在的网络为vmnet1,VMware Workstation中开启一台windows7计算机,网络桥接在VMnet1,IP ...

  6. Internet 上可用的“简单网络时间协议”时间服务器列表

    Internet 上可用的"简单网络时间协议"时间服务器列表 在此公布一些Internet的公网时间服务器,大家可以快点同步时间哦:) Internet 上有两级(或两层)&quo ...

  7. Linux操作系统下的一些简单网络配置命令

    Linux操作系统下的一些简单网络配置命令 转载请注明出自雨林木风 bbs.ylmf.com,本贴地址:http://bbs.ylmf.com/read.php?tid=399679&u= 使 ...

  8. 思科Cisco packet tracer的实验之两个简单网络连接

    思科Cisco packet tracer的实验之两个简单网络连接 1.界面 1.一开始都是从简单的交换机和几台电脑开始的 A网络: IP:210.226.3.1 网关:210.226.3.1 子网掩 ...

  9. 使用java网络编程模拟简单网络即时通信

    使用java网络编程模拟简单网络即时通信 通信流程图: 解析: 1.在上图中我们可以看出对于任何一个客户端,都由两部分构成,发送端和接收端(分别由两个线程来维系) 2.客户端在每一次请求链接时都会轮询 ...

  10. 用python爬虫下载视频_使用Python编写简单网络爬虫抓取视频下载资源

    我第一次接触爬虫这东西是在今年的5月份,当时写了一个博客搜索引擎,所用到的爬虫也挺智能的,起码比电影来了这个站用到的爬虫水平高多了! 回到用Python写爬虫的话题. Python一直是我主要使用的脚 ...

最新文章

  1. 用 Python 实现打飞机,让子弹飞吧!
  2. 【转载】rpc.rstatd安装与配置
  3. 在Spring Framework中@Inject和@Autowired有什么区别? 在什么条件下使用哪一个?
  4. VTK:Utilities之DiscretizableColorTransferFunction
  5. 连接堡垒机出现java环境_Java 8:长期支持的堡垒
  6. 成果堪称“诺奖”一夜成名却无法复现的韩春雨,再发高分文章
  7. android读写缓存文件路径,Android app-cache-Path的 缓存图片、缓存文件的路径包名路径 和外路径比较...
  8. LINUX yum用法
  9. SQL SERVER 查找某个字符在字符串中出现的次数
  10. Linux的Vi命令详解
  11. 如何查看oracle客户端的版本,如何查看Oracle客户端版本
  12. oracle服务 ora_01033,Oracle ORA-01033 错误的解决办法
  13. 开箱体验: Web研发从石器时代过渡青铜时代复盘心得
  14. 住在上千万的豪宅里,你猜建筑成本占多少?
  15. 英语作文计算机国际会议开幕词,国际学术会议英文主持词
  16. 【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)...
  17. sql server 获取本机的ip地址
  18. Linux 静态链接库与动态链接库之一:静态链接库生成及使用
  19. sql多表查询及多表连接查询
  20. 鞋底php是什么材质,软底鞋是什么?软底鞋的鞋底是什么材质?

热门文章

  1. Prim算法实现最小生成树MST(java)
  2. 目标追踪论文之狼吞虎咽(2):在线被动攻击学习
  3. xshell与虚拟机VMware中centos6.7系统突然连不上
  4. linux centos目录结构(一)
  5. 【2018徐州ICPC Gym-102012 M】Rikka with Illuminations【计算几何】
  6. 基础集合论 第一章 9 幂集
  7. 使用WWWGrep检查你的网站元素安全
  8. Fuzzing技术分析
  9. 诡异的问题“该字符串未被识别为有效的 DateTime”
  10. SSAO + FXAA