2022年网络信息混合加密传输 .pdf

上传人:H****o 文档编号:32522989 上传时间:2022-08-09 格式:PDF 页数:10 大小:536.17KB
返回 下载 相关 举报
2022年网络信息混合加密传输 .pdf_第1页
第1页 / 共10页
2022年网络信息混合加密传输 .pdf_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《2022年网络信息混合加密传输 .pdf》由会员分享,可在线阅读,更多相关《2022年网络信息混合加密传输 .pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、设计报告项目名称:网络信息混合加密传输课程名称:计算机网络编程班级:组长:组长:学号:教师:信息工程学院计算机系名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - 2 目 录一、实验目的 . . 3二、实验内容 . . 3三、实验步骤 . . 3( 一) 网络信息混合加密传输的界面设计. . 3 ( 二) 界面的说明:. . 4 ( 三) 程序的流程图. . 5 四、实验中遇到的问题. . 10五、小组分工: . . 10六、实验

2、体会: . 错误!未定义书签。七、个人评价 . . 错误!未定义书签。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - 3 实验网络信息混合加密传输一、 实验目的1. 掌握 RSA和 DES混合加密的原理,及网络传输的实现方法。2. 基于 RSA和 DES混合加密技术,编写网络加密传输程序。二、 实验内容非对称加密算法的计算时间长,对于网络传输信息的实时性有很大影响。而对称加密算法的运算效率高,适用于实际信息的加密。如果将两者结

3、合起来,就可以实现综合效果,通过网络加密传输大量的重要信息。采用 RSA和 DES混合加密技术,结合网络传输的知识,编写一个网络信息加密传输程序。三、 实验步骤(一)网络信息混合加密传输的工作原理发送方接收方RSA公钥加密发送密文DES密钥加密明文RSA密钥对RSA私钥解密接收密文解密后 DES密钥解密明文名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - 4 (二)网络信息混合加密传输的界面设计a. 服务器:b. 客户端(二)界

4、面的说明:a. 服务器:1. 服务器信息:获取服务器的IP 地址;设置端口;开始监听;关闭监听;显示链接至服务器的客户端信息;设定公钥存储位置并保存。2. 接收发送信息:用于显示客户端发送至服务器的信息及实现服务器对客户端的信息发送。 3.8位密码:用于获得用户设置的DES加密密码。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - 5 b. 客户端: 1.客户端信息: 输入链接至的服务器IP 地址及端口; 开始链接; 关闭链接显

5、示链接信息。2. 接收发送信息:用于显示服务器发送至客户端的信息及实现客户端对服务器的信息发送。 3.是否解密:用于决定服务器发送至客户端的信息以明文或密文方式显示。(三)程序的流程图A、服务器端流程图开始执行获取本地IP获取8位 DES密码消息框“输入 8 位密码”否是开始监听接收服务器请求否继续监听是建立连接接收公钥发送用公钥加密后的 DES密钥对明文进行DES加密发送密文至客户端接收客户方发送信息接收信息使用DES密钥解密接收到的密文显示解密后的明文获得用户输入明文发送信息发送其他信息接收其他信息断开监听结束服务结束程序名师资料总结 - - -精品资料欢迎下载 - - - - - - -

6、 - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - 6 B、客户端流程图:开始执行获取用户输入服务器IP 地址否是链接服务器否消息框“链接失败”是建立连接发送公钥接收加密过的DES 密钥DES 密钥加密明文发送密文至服务器接收客户方发送信息接收信息显示解密后的明文获得用户输入明文发送信息发送其他信息接收其他信息断开链接结束服务结束程序是否解密是用解密后的DES 密钥解密接收到密文用私钥解密加密的DES密钥获得 DES 密钥直接显示密文否接收其他信息名师资料总结 - - -精品资料欢迎下载 - -

7、- - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 10 页 - - - - - - - - - 7 (四)主要代码分析1. 发送信息string myenc=EncryptDES( this .richTextBoxSend.Text,sencryptKey); string str=myenc; int i=str.Length; if (i=0) return ; else i*=2; / 因为 str 为Unicode 编码,每个字符占字节,所以实际字节数应*2 byte datasize=new byte 4; d

8、atasize=System.BitConverter.GetBytes(i); / 将位整数值转换为字节数组byte sendbytes=System.Text.Encoding .Unicode.GetBytes(str); / 转字节数组try NetworkStream netStream= new NetworkStream (clientSocket); / 首字节记录发送数据大小 netStream.Write(datasize,0,4); / 发送记录发送数据大小的数据netStream.Write(sendbytes,0,sendbytes.Length); / 发送数据ne

9、tStream.Flush(); this .richTextBoxSend.Rtf= ; 2. 获取公钥MemoryStream ms = new MemoryStream(); / 创建 MemoryStream流BinaryFormatter bf = new BinaryFormatter(); / 二进制格式化NetworkStream netStream= new NetworkStream (clientSocket); / 创建 NetworkStream 流byte datasize=new byte 4; / 存放首字节netStream.Read(datasize,0,4

10、); / 从NetworkStream 流读int size=System.BitConverter.ToInt32(datasize,0); / 确定传送数据的大小Byte message= new byte size; / 存放数据int dataleft=size; / 剩余的要读取字节数int start=0; / 起始位置while (dataleft0) / 读取过程 int recv=netStream.Read(message,start,dataleft); ms.Write(message, 0, recv); start+=recv; dataleft-=recv; ms

11、.Position=0; /MemoryStream 操作位置标记规零 rsa = new RSACryptoServiceProvider(); rsa.KeySize = 1024; rsa.ImportParameters(RSAParameters)bf.Deserialize(ms); / 得到从 MemoryStream经反序列化的公钥string publickey=rsa.ToXmlString(false ); / 公钥转字符串3. 公钥加密 DES密钥byte symKeyEncrypted;/ 对称加密密钥名师资料总结 - - -精品资料欢迎下载 - - - - - -

12、- - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 10 页 - - - - - - - - - 8 byte symIVEncrypted;/ 对称加密初始化向量NetworkStream ns = new NetworkStream (clientSocket);/ 创建 NetworkStream 流symm = new TripleDESCryptoServiceProvider(); symm.KeySize = 192; symKeyEncrypted = rsa.Encrypt(Encoding .UTF8.GetBytes(

13、sencryptKey), false ); / 使用RSA 算法对数据进行加密* symIVEncrypted = rsa.Encrypt(Keys, false ); /keys 为要加密的数据,参数为true 则使用OAEP 填充(仅在运行 Microsoft Windows XP 或更高版本的计算机上可用)执行直接的RSA 加密。否则,如果为 false ,则使用 PKCS#1 1.5 版填充。返回值int i=symKeyEncrypted.Length;/ 对称加密密钥长度byte datasize=new byte 4;/ 存放首字节datasize=System.BitConv

14、erter.GetBytes(i);/ 将指定的数据转换为字节数组ns.Write(datasize,0,4);/ 向netstream 流写;datasize 为类型 Byte 的数组, 该数组包含要写入 NetworkStream 的数据。 0为buffer 中开始写入数据的位置;为要写入NetworkStream 的字节数ns.Write(symKeyEncrypted, 0, symKeyEncrypted.Length); ns.Flush();/ 刷新流中的数据int j=symIVEncrypted.Length;/ 对称加密初始化向量的长度byte datasize2=new

15、byte 4; datasize2=System.BitConverter.GetBytes(i);/ 将指定的数据转换为字节数组ns.Write(datasize2,0,4); ns.Write(symIVEncrypted, 0, symIVEncrypted.Length); ns.Flush(); 4.DES加密解密加密:byte rgbKey = Encoding .UTF8.GetBytes(encryptKey.Substring(0,8); byte rgbIV = Keys;/ 初始化向量byte inputByteArray = Encoding .UTF8.GetByte

16、s(encryptString);/ 需要加密的明文转为字节数组DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider(); / 创建DESCryptoServiceProvider对象MemoryStream mStream = new MemoryStream(); / CryptoStream cStream = newCryptoStream (mStream,dCSP.CreateEncryptor(rgbKey,rgbIV),CryptoStreamMode .Write); cStream.Write(inputB

17、yteArray,0,inputByteArray.Length);/ 将一个字节序列写入当前 CryptoStream ,并将流中的当前位置提升写入的字节数。为buffer 中的字节偏移量cStream.FlushFinalBlock();/ 用缓冲区的当前状态更新基础数据源或储存库,随后清除缓冲区。returnConvert .ToBase64String(mStream.ToArray();/ 将指定的由以64 为基的数字组成的值的String 表示形式转换为等效的8 位无符号整数数组。解密:byte rgbKey = Encoding .UTF8.GetBytes(decryptKey

18、); byte rgbIV = Keys;/ 初始化向量byte inputByteArray = Convert .FromBase64String(decryptString);/ 将指定的由以 64 为基的数字组成的值的String 表示形式转换为等效的8 位无符号整数数组。DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - -

19、- - - - - - - 9 MemoryStream mStream = new MemoryStream(); CryptoStream cStream = newCryptoStream (mStream,DCSP.CreateDecryptor(rgbKey,rgbIV),CryptoStreamMode .Write); cStream.Write(inputByteArray,0,inputByteArray.Length);/ 将一个字节序列写入当前 CryptoStream ,并将流中的当前位置提升写入的字节数。/inputByteArray为字节数组。此方法将inputBy

20、teArray.Length个字节从 0复制到当前流。cStream.FlushFinalBlock();/ 用缓冲区的当前状态更新基础数据源或储存库,随后清除缓冲区。returnEncoding .UTF8.GetString(mStream.ToArray();/返 回 解 密 后 的 数 组MemoryStream ToArray 5. 获得对称密钥privatevoid getSymmetricKey(Socket socket)/ 获得对称密钥 NetworkStream netStream= new NetworkStream (socket); byte datasize=new

21、 byte 4;/ 字节数组netStream.Read(datasize,0,4);/ 读取个字节int size=System.BitConverter.ToInt32(datasize,0);/ 返回由字节数组中指定位置的四个字节转换来的32 位有符号整数。Byte message= new byte size;/ int dataleft=size; int start=0; while (dataleft0) int recv=netStream.Read(message,start,dataleft); start+=recv; dataleft-=recv; symm = new

22、 TripleDESCryptoServiceProvider(); /TripleDESCryptoServiceProvider对象实例化symm.KeySize = 192; byte decryptKey = rsa.Decrypt(message,false ); / 使用 RSA 算法对数据进行解密/message 是要解密的数据如果为true ,则使用 OAEP 填充(仅在运行Microsoft Windows XP 或更高版本的计算机上可用)执行直接的RSA 解密;否则,如果为false ,则使用 PKCS#1 1.5 版填充。sdecryptKey = Encoding .U

23、TF8.GetString(decryptKey);/ 获得解密密钥byte datasize2=new byte 4; netStream.Read(datasize2,0,4); int size2=System.BitConverter.ToInt32(datasize,0);/ 返回由字节数组中指定位置的四个字节转换来的32 位有符号整数。Byte message2= new byte size2; int dataleft2=size; int start2=0; while (dataleft20) int recv2=netStream.Read(message2,start2,

24、dataleft2); start2+=recv2; dataleft2-=recv2; Keys= rsa.Decrypt(message2,false ); / 利用 Decrypt 解密/ 利用 RSA密钥还原 DES的加密密钥message再利用 message还原对称密钥message2名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 10 页 - - - - - - - - - 10 四、 实验中遇到的问题这次试验中最大的问题是程序在运行中的线程异常,幸好在张老

25、师的指导下我们解决了这一难题:在程序this .btnRequest.Enabled=false ; this .listBoxState.Items.Add(与服务器连接成功 ); sendPublicKey(); getSymmetricKey(socket); 之后添加了Control .CheckForIllegalCrossThreadCalls = false ; Thread thread= new Thread( new ThreadStart (AcceptMessage); 语句使得程序可以正常的运行。五、 小组分工:程序编辑及部分调试:程序开发方向及程序编辑:界面设计,程

26、序调试,处理错误和异常,服务器公钥存储部分的编写。六、 试验体会这次的实验充分让我们认识到了自身在编程上的极大的不足和缺陷,由于以前对编程学习的不多, 所以这次实验进行的磕磕绊绊。相对于其他同学,我们的差距很大。虽然在实验中我们查询了大量的资料,但是对程序代码的理解还是不充分,对于方法的调用还是不明确,等等各种问题还要我们不断地去解决。通过这次实验我们了解到了混合加密的方式和主要实现方法,同时对于程序中的大量的精妙的方法调用我们也有了一定的了解。这次实验让我们深深的看到了自身在学习上的欠缺行,我们将在以后的学习道路中不断加强自身对编程的学习。让自身在编程中能到达一个比较不错的水平。感谢张老师在试验中对我们的悉心指点和教导。七、 个人评价:中:中:中名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁