资源描述
中原工学院计算机学院网络安全程序课程设计报告题目:基于des加密的聊天程序班级:网络124班 目录第1章 绪论31.1 des加密背景31.2 聊天程序设计背景4第2章 加密原理52.1 des简介52.2 des加密原理52.3 des加密过程7第3章 聊天程序设计83.1 TCP/IP协议83.2 客户机/服务器模式83.3 Socket9第4章 系统设计114.1 开发语言及环境114.2 需求分析114.2.1 功能需求分析114.2.2 数据需求分析114.2.3 性能需求分析124.2.4 运行需求分析124.3 程序流程图134.4 模块设计144.4.1 服务器144.4.2 客户端15第5章 程序测试175.1 运行结果17第6章 总结21参考文献21第1章 绪论1.1 des加密背景随着计算机和网络在军事、政治、金融、工业、商业等部门的广泛应用,社会对计算机和网络的依赖越来越大,科学技术的研究和发展及其在商业领域的应用等方面,无一不与信息息息相关。所以信息就是生命,信息就是时间,信息就是财富。由于信息是共享的,信息的扩散会产生社会影响,所以保护信息的安全是信息时代的迫切需要。如果计算机和网络系统的信息安全受到破坏将导致社会的混乱并造成巨大损失。因此,确保计算机和网络系统的信息安全已成为世人关注的社会问题和计算机科学与技术领域的研究热点。当前,以Internet为代表的计算机网络的迅速发展和广泛应用,正引起社会和经济的深刻变革,极大地改变着人们的生活和工作方式。Internet已经成为我们生活和工作中一个不可缺少的组成部分。对此,发展我国的电子政务、电子商务和电子金融已成为建设具有中国特色社会主义强国的不可回避的选择。然而,目前影响电子政务、电子商务、电子金融应用的主要技术障碍是信息安全问题。由于Internet原来缺少安全设计,再加上Internet的开放性和无政府状态,使Internet成为一个不安全的网络。这就使得Internet不能适应电子政务、电子商务和电子金融等系统对信息安全的要求。确保信息的安全就必须加强加密技术,加密技术是基于密码学原理来实现计算机、网络乃至一切信息系统安全的理论与技术基础。1977年美国颁布了数据加密标准DES(Data Encryption Stantard),这是密码史上的一个创举。DES算法最初由美国IBM公司设计,经美国国家安全局评测后,颁布为标准。DES开创了向世人公开加密算法的先例。自从公布以来,它一直超越国界,成为国际上商用保密通信和计算机通信的最常用的加密算法。DES也是曾被广泛使用的分组密码,遍及世界的政府,银行和标准化组织把DES作为安全和论证通信的基础。DES算法公开是密码学史上里程碑式的事件1.2 聊天程序设计背景随着互联网技术的发展,互联网应用越来越丰富。互联网以其独特的传播方式吸引了大量用户,同时也给人们带来了许多便利,譬如可以借助于网络进行相互交流、信息传递等。聊天工具作为互联网中运用最为广泛的通信工具之一,它可以让用户之间进行即时的交流和信息的传递。聊天工具的出现可以说是基于互联网通信交流方式的历史性变革,它已经渐渐取代了原来效率低、费用高的如信件、电报的通信方式,以其快速、交互、简便的方式给用户的交流提供了简单、易用的信息平台,成为现今应用最为广泛的即时通信工具之一。随着相关技术的日益发展,用户对功能的需求不断提高。为了更好地服务于用户,聊天工具的功能也在不断地完善。在未来的网络时代中,聊天工具将以即时通信为其基本特点,并与各种网络应用整合,同时随着无线网络的广泛应用,它将成为未来不可缺少的一种通信软件。本课程设计的目的主要是为了满足人们通讯交流的便捷,实现灵活、全面的语音、视频信息的传递和服务。模拟腾讯公司的QQ聊天软件,开发一个多功能的聊天系统软件,该课程设计主要实现文字聊天功能。第2章 加密原理2.1 des简介 DES的设计目标是,用于加密保护静态存储和传输信道中的数据,安全使用1015年。DES综合运用了置换、代替、代数等多种密码技术。它设计精巧、安全、方便,是近代密码的世界标准,为确保数据安全作出了重大贡献。DES的设计充分体现了Shannon信息保密理论所阐述的设计密码的思想,标志着密码的设计与分析达到了新的水平。DES是一种分组密码。明文、密文和密钥的分组长度都是64位。DES是面向二进制的密码算法,因而能够加解密任何形式的计算机数据。DES是对合运算,因而加密和解密共用同一算法,从而使工程实现的工作量减半。2.2 des加密原理DES 全称为Data Encryption Standard即数据加密算法,它是IBM公司研究成功并公开发表的。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。数据加密标准(DES)的算法是用于计算机数据加密保护的分组加密的数学算法,算法以64 bit为一个分组对数据进行加密。使用64 bit的密钥加密64 bit分组的信息。首先将原始数据64 bit明文进行初始置换IP,然后与子密钥(由加密密钥产生)进行一系列迭代运算,最后再经过逆置换,即可得到64 bit密文(加密后数据)。在每一轮中,数列块的右边32 bit数据和密钥(Key)一起传送给函数f,函数f运算的结果再与数列块左边32 bit数据进行“异或”操作。其中S盒(S选择函数)是DES算法的心脏,由它实现非线性变换。解密过程与此类似,只是在应用子密钥时,顺序颠倒为k16,k15,k2,k1。DES算法实现时用到许多的数学知识,子密钥的产生,初始值换IP,加密函数以及逆初始值换。DES的整体结构如图2-1所示:i=1,2,3,,16图2-1 DES的整体结构2.3 des加密过程1)64位密钥经子密钥产生算法产生出16个子密钥:,分别供第一次,第二次,第十六次加密迭代使用。(2)64位明文首先经过初始置换IP(Initial Permutation),将数据打乱重新排列并分成左右两半。左边32位构成,右边32位构成。(3)由加密函数f实现子密钥对的加密,结果为32位的数据组。再与模2相加,又得到一个32位的数据组。以作为第二次加密迭代的,以作为第二次加密迭代的。至此,第一次加密迭代结束。(4)第二次加密迭代至第十六次加密迭代的分别用子密钥进行,其过程与第一次加密迭代相同。(5)第十六次加密迭代结束后,产生一个64位的数据组。以其左边32位作为,以其右边32位作为,两者合并再经过逆初始置换,将数据重新排列,便得到64位密文。至此加密过程全部结束。综上可将DES的加密过程用如下的数学公式描述: 第3章 聊天程序设计3.1 TCP/IP协议TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中设计。因此用户一般不涉及。TCP是面向连接的,通信双方保持一条通路,好比目前的电话线,使用telnet登陆BBS,用的就是TCP协议;UDP是无连接的,通信双方都不保持对方的状态,浏览器访问Internet时使用的HTTP协议就是基于UDP协议的。编程时,编程界面有两种形式:一、是由内核心直接提供的系统调用;二、使用以库函数方式提供的各种函数。前者为核内设计,后者为核外设计。用户服务要通过核外的应用程序才能设计,所以要使用套接字(socket)来设计。3.2 客户机/服务器模式C/S结构(Client/Server结构)是大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。首先服务器方要启动,并根据请求提供相应服务: (1)打开一通信通道并告知本地主机,它在某一公认地址端口上(如http为80)接受客户请求。 (2)等待客户请求到达该端口。 (3)接收到重复服务请求,处理该请求并发送应答信号。接收并发服务请求,要激活一新进程来处理这个客户请求。新进程处理此客户请求,并不需要对其他请求做出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。 (4)返回第二步,等待另外的客户请求 (5)关闭服务器。 客户方: (1)打开一通信通道,并连接到服务器所在主机的特定端口。 (2)向服务器发出服务请求报文,等待并接收应答;继续提出请求。 (3)请求结束后关闭通信通道并终止。 从上面的描述过程可知: (1)客户与服务器进程的作用是非对称的。因此编码不同。 (2)服务进程一般是先于客户请求启动的。只要系统运行,该进程一直存在,直到正常终止或者强迫终止。在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。3.3 Socketsocket之间的连接可以分为三种类型:客户端连接,监听连接以及服器端连接。 客户端连接是指由客户端的socket提出连接请求,要连接的目标是服务器端的socket。为此,客户端的socket必须首先描述它要连接的服务器端socket(主要是指服务器 端socket的地址和端口号),然后再定位所要连接的服务器端socket,找到以后,就向服务器端 socket请求连接。当然,服务器端的socket此时未必正好处于准备好状态,不过,服务器端的 socket会自动维护客户请求连接的队列,然后在它认为合适的时候向客户端socket发出允许连接 (accept)的信号,这时客户端socket与服务器端socket的连接就建立了。监听连接,服务器端 socket并不定位具体的客户端socket,而是处于等待连接的状态。当服务器端socket监听到或者说 接收到客户端socket的连接请求,它就响应客户端socket的请求建立一个新的socket句柄并与客户 端连接,而服务器端socket继续处于监听状态,还可以接收其它客户端socket的连接请求。服务器端连接,是指当服务器端socket接收到客户端socket的连接请求后,就把服务器端socket的描述发给客户端,一旦客户端确认了此描述,连接就建立了。在本文中的聊天程序用的就是监听连接,即服务器设置连接个数后进行监听,客户端进行对服务器端的连接,这样就可以进行相互通信了。第4章 系统设计4.1 开发语言及环境开发语言:c+ 开发环境:visual studio 20134.2 需求分析4.2.1 功能需求分析(1)用户端之间的信息发送,本程序需要实现的最基本的功能。用户在界面上可以将自己需要发送的信息填入相应的对话框中,点击发送按钮后,可以将信息正常的发送给相应的其它用户,这个过程中的客户端与客户端之间使用点对点发送信息,利用TCP/IP协议中的UDP协议。(2)在线用户主机IP列表的维护。在用户发送信息之前,需要选择相应的目的地端IP,这也就需要客户端拥有在线用户主机的IP地址,这个在线主机列表的维护是需要客户端定时自动向服务器端发送信息,服务器端收集并维护在线用户列表,再发送回客户端。需要在客户端和服务器端都使用定时器来完成此功能。(3)在C/S模式中,服务器与客户端是相互依赖的。在客户端启用以后,需要查看服务器端是否在线,服务器在线才能正常使用客户端,如果服务器不在线,则在检测一定次数以后自动退出客户端程序。在使用过程中,客户端在指定时间内未向服务器端发送信息的,服务器认为客户端下线;客户端在一定时间内未收到服务器端信息的,认为服务器已经下线,则提示用户并建议退出,在用户一定时间后没有退出的则自动关闭客户端程序。4.2.2 数据需求分析(1)客户端之间聊天信息。在控件上显示时格式化,更易于用户的查看自己发送或接收到的信息。(2)在线用户聊天信息。服务器端存放在适当的空间中,在发送给客户端时,对信息列表进行格式化,便于客户端提取信息。(3)客户端向服务器端发送的确认在线信息。包括客户端刚刚启动时的初始化信息和在使用过程中的确认在线信息。(4)其它程序内部可能需要设计的数据结构体。4.2.3 性能需求分析(1)可靠性高,能在由于系统问题或其它原因产生错误后,作出相对应处理,比如网络初始化失败、服务器不在线等,可以提示用户安全退出本程序,在出现不可知的错误以后,可以尽量安全的退出程序。在程序的设计过程中,要求能尽可能多的设想到用户使用过程中可能发生的事件,并能在判断事件后做出相应的处理,使程序具有较高的容错性能。(2)宜操作性,程序简单易懂,容易上手使用。设计界面是,简化界面的复杂性,模拟QQ等现有即时通讯工具的界面,使用户能很容易看懂并使用。(3)开发文档易理解,保证以后自己二次开发或他人接手开发时,能够清晰的理解整个系统的设计思路和实现细节。(4)模块化设计此软件的功能,不同的模块实现不同的功能,使得软件易于以后的维护与扩展,在以后可以更好的完善本软件的功能,更方便于在工作中的应用。4.2.4 运行需求分析(1)用户界面程序较小,启动速度快。可在网络中使用。启动后的应用界面要清爽,设计要简单明了,要具有较高的易用性。(2)故障处理在遇到可预知的故障与情况时,能提示用户;在遇到不可预知的故障时能安全退出。4.3 程序流程图首先在服务器方,利用socket()函数建立流式套接字,返回套接字号s,接着利用bind()函数将套接字s与本地地址绑定,紧接着利用listen(0函数通知TCP,监听客户方,服务器准备接收连接,没有连接的话,服务器方通过closesocket()关闭套接字s,服务结束。有连接的话,在客户方,通过socket()函数建立流式套接字s,此时在服务器方,建立连接,通过accept()返回,得到新的套接字ns,客户方通过connect()将套接字s与远程地址连接,此时服务器方/客户方在ns/s上读/写数据,直到交换完成。交换完成后,服务器方/客户方关闭套接字ns/s,最后服务器方通过closesocket()关闭最初套接字s,服务结束。具体设计过程如图1-2所示。服务器方Socket()建立流式接字,返回套接字号s返回套接字号返回套接字号sRecv()/send()在ns上读/写数据,直到完成交换listen()通知TCP服务器准备接收连接accept()接收连接,等待客户端的连接建立连接,accept()返回,得到新套接nsbind()套接字s与本地地址绑定closesocket(),关闭套接字nsclosesocket()关闭最初套接字s,服务结束客户方Socket()建立流式套接字号sconnect()将套接字s与远程地址连接Recv()/send()在s上读/写数据,直到完成交换closesocket()关闭套接字s,结束TCP 图124.4 模块设计4.4.1 服务器首先运行服务器,服务器侦听端口消息,等待客户端向其建立连接的申请,一旦接收到客户端的连接请求,服务器将返回一个新的套接字描述符,通过该描述符调用数据传输函数即可与客户端进行数据的收发。服务器若接收的是登陆信息,向该用户发送在线用户列表,并更新服务器的在线用户列表;若收到的是发送信息,服务器解析信息,然后通过广播消息,向其所有线用户列表发送消息。具体代码如下:4.4.2 客户端在运行服务器之后,运行客户端。客户端首先向服务器提出建立连接请求,然后建立一个套接字描述符,通过该描述符调用数据传输函数即可与服务端进行数据的收发。用户登录成功后,向服务器发送登陆消息,并更新本地在线用户列表,然后通过服务器实现与其他客户聊天;当客户退出,向服务器发送下线消息。具体代码如下:4.4.3 加密模块第5章 程序测试5.1 运行结果开启服务器:利用客户端连接服务器:输入昵称并发送消息:加密发送,接收端收到的是密文:解密密文:第6章 总结这次的课程设计是两个人一组完成的,题目是基于des加密的聊天程序,在平日的生活学习中,可以说QQ等即时通讯软件已占据重要的位置,也深受大家的喜爱,所以这个课程设计很有现实意义,做起来也比较感兴趣。在具体做的过程中,参考了老师所讲还有网上的一些程序,虽然这个聊天的界面及功能比较简单,但从代码的编写及结果的调试成功还是花了我们很多的心思。从资料的收集和文档的编写等等。课程设计项目的虽然要求是两人完成,但还是很多问题的解决离不开老师的指导及同学之间的探讨,这些在做项目的时候都是必不可少的。学校提供了设计的机房还有老师的悉心指导,这些跟课程设计的顺利完成都是密不可分的,在这里我们非常感谢大家带来的帮助。另外就是知识方面的问题,计算机网络和c+ Socket有很多方面的知识还是很不熟悉,具体用到的时候就感觉生疏,或者还是缺乏设计方面的实践。课程设计的机会不是很多,由于所学的知识包含了太多的方面,所以实践方面还是远远不够,希望在学校期间能够多一些类似的机会。虽然课程设计顺利的完成了,但由于我们水平有限,还是有很多的欠缺跟不足之处,希望老师给予指正。参考文献1谢希仁计算机网络(第5版)北京:电子工业出版社2钱能C+程序设计教程北京:清华大学出版社3陈鸣,计算机网络实践教程,机械工业出版社.4曹丽娜通信原理(第六版)国防大学出版社5任泰明.TCP/IP协议与网络编程,西安:西安电子科技大学出版社,2004.36H.M.DeitelP.J.Deitel.C+程序设计教程,北京:机械工业出版社,2006.67吴功宜.计算机网络(第2版),北京:清华大学出版社,2007.38谭浩强.C程序设计(第二版),清华大学出版社9郎锐罗发根.VisualC+网络通信程序开发指南,北京:机械工业出版社,2004.3
展开阅读全文