网络数据通信的加密传输设计说明书_第1页
网络数据通信的加密传输设计说明书_第2页
网络数据通信的加密传输设计说明书_第3页
网络数据通信的加密传输设计说明书_第4页
网络数据通信的加密传输设计说明书_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.②在密钥管理方面,RSA优于DES,因为RSA采用公钥加密,对公钥的更新很容易,各通信对象只需要保护自己的私钥。DES加解密模块由文件浏览、文件加密和文件解密三个部分组成;RSA加解密模块由密钥生成、数据加密和数据解密三个部分组成。文件传输模块共分为两个部分:发送端和接收端。通过文件加密模块对明文进行加密后,密文由发送端到接收端,接收到的密文再进行解密,就可显示出明文,这样就可完成网络数据的加密传输。4数据加密传输系统的实现4.1C++语言介绍C++语言是一种优秀的面向对象程序设计语言,它在C语言的基础上发展而来,但它比C语言更容易为人们学习和掌握。C++以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。面向对象的设计思想是在原来结构化程序设计方法基础上的一个质的飞跃,C++完美地体现了面向对象的各种特性。C++的设计目标,就是要让C++既具有适合于系统程序设计的C语言所具有的可适应性和高效性,又能在其程序组织结构方面具有像Simula那样的语言设施(Simula所支持的这种程序组织结构通常被称为面向对象程序设计风格)。在设计的时候,还做了很大的努力,使得引借自Simula的高层次的程序设计技术能够应用于系统程序设计之中。这即是说,C++所提供的抽象机制能够被应用于那些对效率和可适应性具有极高要求的程序设计任务之中。socket简介:Socket通常也称作“套接字”,用于描述IP地址和端口。在Internet上的主机一般运行了多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。在.Net中,System.Net.Sockets命名空间为需要严密控制网络访问的开发人员提供了WindowsSockets接口的托管实现。System.Net命名空间中的所有其他网络访问类都建立在该套接字Socket实现之上。

其实,Socket可以象流一样被视为一个数据通道,这个通道架设在应用程序端(客户端)和远程服务器端之间,而后数据的读取和写入均针对这个通道来进行。针对Socket编程,.NET框架的Socket类是Winsock32API提供的套接字服务的托管代码版本。其中为实现网络编程提供了大量的方法,大多数情况下,Socket类方法只是将数据封送到它们的本机Win32副本中并处理任何必要的安全检查。

在使用之前,需要首先创建Socket对象的实例,这可以通过Socket类的构造方法来实现:PublicSock(AddressFamilyaddressFamily,SocketTypesocketType,ProtocolTypeprotocolType)

其中,addressFamily参数指定Socket使用的寻址方案,socketType参数指定Socket的类型,protocolType参数指定Socket使用的协议。下面的示例语句创建一个Socket,它可用于在基于TCP/IP的网络(如Internet)上通讯。

Sockets=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);若要使用UDP而不是TCP,需要更改协议类型,如下面的示例所示:Sockets=

newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);

一旦创建Socket,在客户端,就可以通过Connect方法连接到指定的服务器,并通过Send/SendTo方法向远程服务器发送数据,而后可以通过Receive/ReceiveFrom从服务端接收数据;而在服务器端,需要使用Bind方法绑定所指定的接口使Socket与一个本地终结点相联,并通过Listen方法侦听该接口上的请求,当侦听到用户端的连接时,调用Accept完成连接的操作,创建新的Socket以处理传入的连接请求。使用完Socket后,要使用Shutdown方法禁用Socket,并使用Close方法关闭Socket。4.2数据加密传输系统的实现4.2.1DES加密传输系统的实现DES加密传输系统分为两个模块:加解密模块和传输模块。它的过程是DES加密模块对明文数据进行加密,得到的密文由发送端经过传输模块到接收端,接收到的密文在进行解密,即可得到明文。voidCDESDlg::OnButtonClear(){//TODO:Addyourcontrolnotificationhandlercodehere//清除编辑框中的字符;UpdateData(true);m_OpenPath.Empty();m_SavePath.Empty();m_key.Empty();UpdateData(false);}voidCDESDlg::OnButtonEncrypt(){//TODO:Addyourcontrolnotificationhandlercodehere//加密//加密字符串UpdateData(true);if(m_key.GetLength()<8){MessageBox("输入八个数字作为密钥");exit(0);}inthandle=open(m_OpenPath,O_CREAT);//得到文件的句柄m_FileLength=filelength(handle);//得到要加密的文件的长度;close(handle);//关闭文件m_FileLength/=1000.0;//计算文件的长度,千字节为单位;UpdateData(false);//更新以将数据显示在编辑框中MessageBox("加密!");CTimeTime1=CTime::GetCurrentTime();//加密的起始时间intt_min1=Time1.GetMinute();intt_sec1=Time1.GetSecond();DES_Encryptp;//入口参数m_OpenPath:要加密的文件路径//m_SavePath:密文的保存路径//m_key:用户密钥p.DES_EncyptFile(m_OpenPath,m_SavePath,m_key);CTimeTime2=CTime::GetCurrentTime();intt_min2=Time2.GetMinute();intt_sec2=Time2.GetSecond();m_time=60*(t_min2-t_min1)+(t_sec2-t_sec1);//加密所用时间UpdateData(false);MessageBox("加密完成");}voidCDESDlg::OnButtonDeEncrypt(){//解密UpdateData(true);inthandle=open(m_OpenPath,O_CREAT);//要解密文件的句柄;m_FileLength=filelength(handle);//得到要解密的文件的长度;close(handle);//关闭文件;m_FileLength/=1000.0;//计算文件的长度,千字节为单位;UpdateData(false);//更新以将数据显示在编辑框中MessageBox("哈哈,开始解密了!");CTimeTime1=CTime::GetCurrentTime();//解密的起始时间;intt_min1=Time1.GetMinute();intt_sec1=Time1.GetSecond();DES_Decryptp;//入口参数m_OpenPath:要解密的文件路径//m_SavePath:明文的保存路径//m_key:用户密钥p.DES_DecryptFile(m_OpenPath,m_SavePath,m_key);CTimeTime2=CTime::GetCurrentTime();intt_min2=Time2.GetMinute();intt_sec2=Time2.GetSecond();m_time=60*(t_min2-t_min1)+(t_sec2-t_sec1);//解密所用的时间UpdateData(false);MessageBox("解密完成");}下面是DES加解密传输过程的图解。数据加密界面:图4.1DES加密传输系统数据加密界面数据传输界面:图4.2DES加密传输系统数据传输界面数据解密界面:图4.3DES加密传输系统数据解密界面4.2.2RSA加密传输系统的实现RSA加密传输系统分为两个模块:加解密模块和传输模块。它的过程是RSA加密模块对明文数据进行加密,得到的密文由发送端经过传输模块到接收端,接收到的密文在进行解密,即可得到明文。voidmain(){intp,q;cout<<"请输入两个较大的素数:"<<endl;cin>>p>>q;cout<<"p="<<p<<",q="<<q<<endl;intn,o;n=p*q;o=(p-1)*(q-1);cout<<"n="<<n<<",o="<<o<<endl;cout<<"<<o<<"互素的数e:"<<endl;inte,i;floatd;cin>>e;for(i=1;;i++){d=(float)(o*i+1)/e;if(d-(int)d==0)break;}cout<<"e="<<e<<",d="<<d<<endl;cout<<"公开密钥Pk={e,n}={"<<e<<","<<n<<"}"<<endl;cout<<"秘密密钥Sk={d,n}={"<<d<<","<<n<<"}"<<endl;cout<<endl;cout<<"请输入要加密的正整数(以-1结束):"<<endl;intm1[500],m3[500],m4[500];doublem2[500];intj;for(j=0;j<500;j++){cin>>m1[j];if(m1[j]==-1)break;m2[j]=pow(m1[j],e);m4[j]=m2[j]/n;m3[j]=m2[j]-m4[j]*n;}cout<<"密文为:"<<endl;intk;for(k=0;k<j;k++)cout<<m3[k]<<"";cout<<endl;}下面是RSA加解密传输过程的图解。数据加密界面:图4.4RSA加密传输系统数据加密界面数据传输界面:图4.5RSA加密传输系统数据传输界面数据解密界面:图4.6RSA加密传输系统数据解密界面4.2.3DES和RSA混合加密系统的实现DES和RSA混合加解密系统是用DES加密系统先对明文进行加密,然后用RSA对DES的密钥进行加密,这样就起到了双重保护,使得在传输过程中即使密钥被截获了,也不容易破解出明文。下面是DES和RSA混合加解密传输过程的图解。数据加密界面:图4.7DES和RSA混合加密传输系统数据加密界面密钥加密界面:图4.8DES和RSA混合加密传输系统密钥加密界面数据传输界面:图4.9DES和RSA混合加密传输系统数据传输界面密钥传输界面:图4.10DES和RSA混合加密传输系统密钥传输界面密钥解密界面:图4.11DES和RSA混合加密传输系统密钥解密界面数据解密界面:图4.12DES和RSA混合加密传输系统数据解密界面4.3

本章小结

本章是在VC6.0平台上对数据通信加密传输的实现,该系统包括两个模块:文件的传输模块和文件的加解密模块。该系统的实现是,由文件的加解密模块对明文进行加密后,由文件的传输模块传送密文,再由文件的加解密模块解密得到明文。文件的加解密分为三种方式:DES加解密、RSA加解密与DES和RSA混合加解密。这三种方式中DES加解密速度比较快,RSA加解密安全性比较好,DES和RSA混合加解密利用了两种算法的优点,虽然比较麻烦,但是对速度和安全性都有了一定的保证。文件的传输是由socket编程实现,文件的发送端可以对文件进行浏览和选取,接收端输入接收的IP地址后就可接收到文件。5总结本次毕业设计网络数据通信的加密传输所做的工作如下:1.对网络安全问题进行了研究,发现威胁网络安全的因素有两种:一是用户的操作不当,二是人为的恶意攻击。尤其在数据传输过程中的,信息更容易被截获、破坏、修改。所以实现数据的安全传输一直是研究热点,而保证网络中的数据安全传输最重要的工具是加密。2.对加密的相关技术进行了学习,尤其是对称密钥加密算法DES和非对称密钥加密算法RSA的原理进行了学习。DES算法缺点是密钥相对较短,比较不安全;优点是加密速度相当的快。RSA算法的安全性依赖于大数的因子分解,就目前的技术而言,解决大数的分解问题是相当困难的,所以相对安全;缺点是密钥的产生相对比较麻烦,收到素数产生机制的限制,很难做到一次一密,速度相对较慢。3.在设计中,系统分为两个模块:加解密模块和传输模块。加解密模块分别采用了DES和RSA两种算法对文件进行加解密;传输模块分为两个部分:发送端和接收端。系统的整体结构设计就是通过文件加密模块对明文进行加密后,密文由发送端到接收端,接收到的密文再进行解密得出明文。4.在VC6.0平台上,实现了数据通信的加密传输,由文件的加解密模块对明文进行加密后,由文件的传输模块传送密文,再由文件的加解密模块解密得到明文。文件加解密模块的实现有三种方案:DES加解密传输、RSA加解密传输与DES和RSA混合加解密传输;文件传输模块是由socket函数编程实现。通过学习,发现DES和RSA这两个加密算法各有自己的优势,如果能够综合利用会对网络数据的加密起到很大的保护作用。如RSA算法中公钥和私钥的作用,只有在公钥负责加密,私钥负责解密的时候,才可以保证文件的安全性,RSA的优点是非对称的算法,不需要在网络中传输密码,但是RSA算法相对于DES算法时间复杂度相对较大,所以用DES加密要传输的文件,用RSA加密DES的密钥,这样既保证了文件传输的安全性,也减少了时间复杂度。

通过这次学习,我接触到了很多以前没有学过的知识,对加密算法有了一定的了解,但是由于自身的编程经验积累不够,学习时间相对仓促,所以在系统编程中请教了编程经验相对丰富的同学,而在编程中我获得了很多经验,也知道了自己的缺陷,在以后工作学习中会重点去克服。附录ADES加密算法程序//DES.cpp:implementationoftheDESclass.#include"stdafx.h"#include"DESlxp.h"#include"DES.h"#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endif//Construction/DestructionDES::DES(){}DES::~DES(){}//initialpermutationIP//初始置换//finalpermutationIP^-1//最终置换//expansionoperationmatrix//扩展置换//32-bitpermutationfunctionPusedontheoutputoftheS-boxes//P置换//permutedchoicetable(key)//密钥置换1//permutedchoicekey(table)//密钥置换2//numberleftrotationsofpc1conststaticcharLOOP_Table[16]={ 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};//The(in)famousS-boxes//S盒置换typedefbool(*PSubKey)[16][48];staticvoidSDES(charOut[8],charIn[8],constPSubKeypSubKey,BOOLType);//DES加/解密staticvoidSetKey(constchar*Key,intlen);//设置密钥staticvoidSetSubKey(PSubKeypSubKey,constcharKey[8]);//设置子密钥staticvoidF_func(boolIn[32],constboolKi[48]);//f函数staticvoidS_func(boolOut[32],constboolIn[48]);//S盒代替staticvoidTransform(bool*Out,bool*In,constchar*Table,intlen);//变换staticvoidXor(bool*InA,constbool*InB,intlen);//异或staticvoidRotateL(bool*In,intlen,intloop);//循环左移staticvoidByteToBit(bool*Out,constchar*In,intbits);//字节组转换成位组staticvoidBitToByte(char*Out,constbool*In,intbits);//位组转换成字节组staticboolSubKey[2][16][48];//16圈子密钥staticboolIs3DES;//3次DES标志staticcharTmp[256],deskey[16];//CodestartsfromLine130voidSDES(charOut[8],charIn[8],constPSubKeypSubKey,BOOLType){staticboolM[64]={0},tmp[32]={0},*Li=&M[0],*Ri=&M[32];ByteToBit(M,In,64);Transform(M,M,IP_Table,64);if(Type==ENCRYPT){for(inti=0;i<16;++i){memcpy(tmp,Ri,32);F_func(Ri,(*pSubKey)[i]);Xor(Ri,Li,32);memcpy(Li,tmp,32);}}else{for(inti=15;i>=0;--i){memcpy(tmp,Li,32);F_func(Li,(*pSubKey)[i]);Xor(Li,Ri,32);memcpy(Ri,tmp,32);} }Transform(M,M,IPR_Table,64);BitToByte(Out,M,64);}boolDES::Des_Go(char*Out,char*In,longdatalen,constchar*Key,intkeylen,boolType){if(!(Out&&In&&Key&&(datalen=(datalen+7)&0xfffffff8))) returnfalse; SetKey(Key,keylen); if(!Is3DES){//1次DES for(longi=0,j=datalen>>3;i<j;++i,Out+=8,In+=8) SDES(Out,In,&SubKey[0],Type); }else{//3次DES加密:加(key0)-解(key1)-加(key0)解密::解(key0)-加(key1)-解(key0) for(longi=0,j=datalen>>3;i<j;++i,Out+=8,In+=8){ SDES(Out,In,&SubKey[0],Type); SDES(Out,Out,&SubKey[1],!Type); SDES(Out,Out,&SubKey[0],Type);}} returntrue;}//加密后串长度一定是8的倍数.longDES::Des_Do(char*Out,constchar*In,longdatalen,constchar*Key,intkeylen,BOOLType){ char*tOut=Out; char*tIn=(char*)In; SetKey(Key,keylen); inti=0; for(i=0;i<datalen;i+=8,tOut+=8,tIn+=8){SDES(tOut,tIn,&SubKey[0],Type);} returni;}附录BRSA加密算法程序//RSADlg.cpp:implementationfile#include"stdafx.h"#include"RSA.h"#include"RSADlg.h"#include<stdlib.h>#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif//CAboutDlgdialogusedforAppAboutclassCAboutDlg:publicCDialog{public: CAboutDlg(); enum{IDD=IDD_ABOUTBOX}; protected: virtualvoidDoDataExchange(CDataExchange*pDX);protected: DECLARE_MESSAGE_MAP()};voidCRSADlg::OnButton2()//密钥产生{ UpdateData(TRUE);srand((unsigned)time(NULL));// p=get_rand(); q=p; while(q==p) { if(q==p) q=get_rand(); elsebreak; } n=p*q; fn=(p-1)*(q-1);boolb=false; while(!b) {e=get_e(fn); if(e>=fn) continue;b=hu_zhi(e,fn); } d=get_D(e,fn); m_P=p; m_Q=q; m_N=n; m_E=e; m_D=d; UpdateData(FALSE);}voidCRSADlg::OnButton3()//加密{ UpdateData(true); len=m_MW.GetLength(); intm; m_MIW=_T(""); for(inti=0;i<len;i++) {m=(int)m_MW.GetAt(i);c=MO_func(m,e,n); miwen[i]=c; m_MIW+=(int)(c%128); //m_MIW.SetAt(i,(char)c); } UpdateData(false);}voidCRSADlg::OnButton4()//解密{ UpdateData(true); m_JMIW=_T(""); for(inti=0;i<len;i++) {m=MO_func(miwen[i],d,n); m_JMIW+=(char)m;} UpdateData(false);}附录C文件传输模块程序发送端//Server.cpp:Definestheclassbehaviorsfortheapplication.#include"stdafx.h"#include"Server.h"#include"ServerDlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifBOOLCServerApp::InitInstance(){ if(!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED); returnFALSE; } //Standardinitialization //Ifyouarenotusingthesefeaturesandwishtoreducethesize //ofyourfinalexecutable,youshouldremovefromthefollowing //thespecificinitializationroutinesyoudonotneed. CServerDlgdlg; m_pMainWnd=&dlg; intnResponse=dlg.DoModal(); if(nResponse==IDOK) { //TODO:Placecodeheretohandlewhenthedialogis //dismissedwithOK } elseif(nResponse==IDCANCEL) { //TODO:Placecodeheretohandlewhenthedialogis //dismissedwithCancel } //Sincethedialoghasbeenclosed,returnFALSEsothatweexitthe //application,ratherthanstarttheapplication'smessagepump. returnFALSE;}接收端//Client.cpp:Definestheclassbehaviorsfortheapplication.#include"stdafx.h"#include"Client.h"#include"ClientDlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif//CClientAppconstructionCClientApp::CClientApp(){ //TODO:addconstructioncodehere, //PlaceallsignificantinitializationinInitInstance}//TheoneandonlyCClientAppobjectCClientApptheApp;//CClientAppinitializationBOOLCClientApp::InitInstance(){ if(!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED); returnFALSE; } //Standardinitialization //Ifyouarenotusingthesefeaturesandwishtoreducethesize //ofyourfinalexecutable,youshouldremovefromthefollowing //thespecificinitializationroutinesyoudonotneed. CClientDlgdlg; m_pMainWnd=&dlg; intnResponse=dlg.DoModal(); if(nResponse==IDOK) { //TODO:Placecodeheretohandlewhenthedialogis //dismissedwithOK } elseif(nResponse==IDCANCEL) { //TODO:Placecodeheretohandlewhenthedialogis //dismissedwithCancel } //Sincethedialoghasbeenclosed,returnFALSEsothatweexitthe returnFALSE;}参考文献[1]王杰.计算机网络安全的理论与实践[M].:高等教育,2006.10[2]克洪,王大玲,董晓梅.实用密码学与计算机数据安全[M].第二版.东北大学,2001[3]朱闻亚.数据加密技术在计算机网络安全中的应用价值研究[J].制造业自动化,2012年6期[4]黄河明.数据加密技术与其在网络安全传输中的应用.硕士论文,2008年[5]延军.略谈信息数据加密对网络安全的作用[J].科技信息,2011年7期[6]戴华秀,强.浅谈数据加密技术在网络安全中的应用[J].华章,2011年7期[7]应信.网络安全发展的趋势[M].:中国计算机报,2010.11[8]孟扬.网络信息加密技术分析[J].信息网络安全,2009年4期[9]赖溪松,亮,真诚.计算码学与其应用[M].:国防工业,2001.7[10]林琳,罗安.基于网络安全的数据加密技术的研究[J].现代电子技术,2004年11期[11]邵雪.数据加密技术在计算机网络安全领域的应用探讨[J].中国市场,2011年45期[12]ChrisHare&KaranjitSiyan,成勇等译.Internet防火墙与网络安全[M].:机械工业,2010.11[13]王禄珉.网络安全数据加密问题的剖析[J].硅谷,2011年18期[14]希仁.计算机网络[M].:电子工业,2008.1[15]D.J.Kang,J.J.Lee,B.H.Kirn,D.Hur.ProposalstrategiesofkeymanagementfordataencryptioninSCADAnetworkofele

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论