保密监控系统设计毕业论文_第1页
保密监控系统设计毕业论文_第2页
保密监控系统设计毕业论文_第3页
保密监控系统设计毕业论文_第4页
保密监控系统设计毕业论文_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

本 科 毕 业 设 计(2015 届)题目 保密监控系统学院 电子信息学院专业 电子信息工程班级学号学生姓名指导教师完成日期诚 信 承 诺我谨在此承诺:本人所写的毕业论文保密监控系统均系本人独立完成,没有抄袭行为,凡涉及其他作者的观点和材料,均作了注释,若有不实,后果由本人承担。承诺人(签名): 年 月 日本科毕业设计摘要本次毕业设计主要是实现一个保密监控系统。即大概处理流程为客户端通过摄像头采集视频信号,利用混沌加密算法对二进制流进行加密,再将加密后的信号通过 TCP/IP 协议进行传输,在服务器(接收端)接收到信号之后,通过解密将信号还原成跟原始信号一样的二进制文件,再将二进制视频文件实时显示。需要处理的关键点有三点:分别为:混沌加密和密钥同步,视频文件传输,TCP/IP 传输。混沌加密技术主要是由离散混沌系统产生性能良好的混沌序列(本文采用Logistic 映射作为离散混沌系统) ,将此生成的混沌序列作为加密密钥,由密钥和明文进行简单的算法处理产生密文,同时进行密钥的同步。在解密端通过由密钥同步生成的密钥再对密文进行解密。TCP/IP 传输,经过 UDP 和 TCP 两者的简单比较,基于 TCP 协议的在传输过程中不易丢包,本次实验决定使用 TCP 协议进行传输。简述为创建和绑定socket,然后在服务器端进行监听,从客户端得到信号后进行三次握手,建立连接后,将加密后的二进制文件通过 socket 进行传输。最后能够实现的结果为能在服务器端进行信号采集视频信号,通过加密后传输到客户端,再还原出视频信号。关键词:混沌加密;密钥同步; TCP/IP 协议;视频监控本科毕业设计ABSTRACTThe main aim of this thesis is to design and realize Security monitoring system. That probably processing procedure for video signal by camera, chaotic encryption algorithm is used to analyse the binary stream encryption, then the encrypted signals transmitted through TCP/IP protocol, the client (receiver) receives a signal, through the decryption signal back into the binaries, as the original signal to convert binary file into video files.Need to deal with the three key points: respectively: chaos encryption and key synchronization, the format of the video file transfer as a binary type, TCP/IP transport.Chaos encryption technology mainly by the chaotic sequence of discrete chaotic system to produce good performance (based on the Logistic map as a discrete chaotic system), the generating chaotic sequence as the encryption keys, generated by the simple algorithm processing key and plaintext cipher text, at the same time key synchronization. On the decryption end by key synchronization generated key to decrypt the ciphertext to again.TCP/IP transmission, through simple comparison, both UDP and TCP based on TCP protocol in the process of transmission is not easy to lost package, this experiment decided to use the TCP protocol to transmit. Briefly to create and binding the socket, and then on the server side for listening, get the signal from the client after three times handshake, after the connection is established, will the encrypted binary files transmitted through the socket.Finally able to achieve the result of signal acquisition video signal on the server side, and through the encrypted transmission to the client, to restore the video signal.Keywords:chaos encryption; Key synchronization;TCP/IP protocol;video surveiy本科毕业设计目录1 引言 .12 概述 .22.1 混沌理论的形成 .22.2 混沌基本理论及其特性 .22.3 混沌加密与密码学 .32.4 本章小结 .43 种常见的混沌离散系统 .53.1 Logistic 混沌映射 .53.2Tent 映射(一维) .73.3 Cubic 映射 .83.4Logistics 离散系统和 Tent 离散系统的比较 .93.5 本章小结 .94 混沌序列和混沌加密算法 .114.1 混沌序列的生成 .114.2 混沌序列性能的测试 .134.3 混沌加密算法 .144.4TCP/IP 协议 .165 保密监控系统的设计与实现 .185.1 系统简介 .185.2 软件平台的搭建 .195.3 混沌密钥发生器模块 .205.4 混沌加密解密模块 .225.5 文件读写模块 .245.6 文件传输模块 .255.7 密钥同步模块 .285.8 视频采集模块与显示模块 .295.9 本章小结 .306 系统整体框架实现 .317 总结及研究展望 .327.1 工作总结 .32本科毕业设计7.2 研究展望 .33致谢 .34参考文献 .35本科毕业设计11 引言近年来安防领域的不断发展,视频监控已经成为了物联网终端的信号采集阶段的很重要的一部分。随着交通不断发展,以及一些车站机场等大型的公共场合和配合一些公安局破案方面,视频监控需要的地方越来越多。视频监控,举个例子来说,对于交通而言可以很监控到车流量的大小,方便交通部门更好的根据监控中获取的信息指定更有效的措施,避免交通拥堵。也可以监控一些违反交通规则的车辆,通过监控中得到的车牌号来查找到车主,这样车主就被监督,一方面减少了违章行为,另一方面也可以提高交通部门的工作效率。就上文论述,视频监控是平安城市建设不可或缺的一部分,但是视频内容安全一直是视频监控厂商以及客户层或者市政监视不太重视的领域,据调查了解大部分存储在摄像终端的信息都是出于无加密的明文状态,很容易造成信息的泄露和篡改。随着各地平安城市项目及物联网项目的大规模启动,政府对平安城市建设的要求也在不断的提高,视频内容的安全保护也逐渐得到了重视,出现在各个视频监控项目中。传统使用的加密方法一般局限于对加密算法提高复杂度来实现,这不仅需要投入大量的人力物力,而且软件加密算法提高后其需要的硬件 CPU的运算速度也要增加,还有可能导致视频监控中最重要的实时性降低。所以我们一直再寻找跟高效的加密方法。本课题主要要解决的问题是如何更高效的加密有不牺牲实时性和提高对硬件的要求,另一方面选取那种协议进行视频文件的传输。混沌理论起源于最初的蝴蝶效应,指的是混沌具有很好的初值敏感性,通过一组离散混沌系统方程,输入的初值不同便能生成完全不同的随机的混沌序列。这个特性和密码学中所要求的随机性和不确定性很好的结合起来,再加上混沌系统这个特性不需要在加密算法复杂度上增加其复杂度,使得视频传输的实时性更好,对硬件要求更低。所以混沌加密是目前比较流行的安全性较高的加密技术。本设计采用离散混沌系统生成随机序列作为密钥,对文件加密之后利用TCP/IP 协议对文件进行传输到服务器端,再解密恢复原始的视频信号。该系统相较于传统的加密传输而言具有更高的安全性和实时性,将会是以后保密视频监控的发展趋势。本科毕业设计22 概述2.1 混沌理论的形成对于“混沌”一词,很早前人们就认为宇宙是由混沌状态发变化来的,在宇宙最开始的时候,我们的整个空间都是混沌的,后来经过逐渐的发展,就形成了我们现在有序的世界。1918 年,G. Duffing 的做了一项关于非振动系统的研究,发现了一种之前没有出现过的奇怪的现象。后来在生态系统研究中即把昆虫放到一个封闭的环境下,让其自由繁殖,父代繁殖后当年死掉,子类继续繁殖,总结出 Logistic 方程,它是我们最原始也是最简单的一维混沌系统,Logistic 方程也是目前在各个领域的研究和应用中最广泛的一维混沌系统。1963 年,Lorenz 在在用计算机模拟天气变化情况和规律的时候,使用了三个方程,三个方程是确定的,其中方程中的三个参数各不相同,最后三个方程得出的迭代值均使得气候不能精确重演,呈现出了混沌系统的特性。于是 Lorenz 发表了一篇论文,论文名字叫确定性的非周期流 。在该论文中提出了混沌系统的不可预测性,并指出了非周期性和混沌系统中的不可预测性存在有联系,从那时候开始,更多的科学家们就开始了混沌这一现象的研究。 “蝴蝶效应”也是有Lorenz 提出来的,并首次用统计观察等数值实验方法对混沌现象进行研究。1982 年,Cuckenheimer 在研究中,利用了 Lyapunov 指数,使人们更深层次的了解到混沌中的不可预测性和真正意义上的随机性是不一样的,所以在混沌系统中随机性叫做伪随机性。2.2 混沌基本理论及其特性在维基百科中对混沌理论进行了如下的定义:混沌理论(Chaos theory)是关于非线性系统在一定参数条件下展现分岔(bifurcation) 、周期运动与非周期运动相互纠缠,以至于通向某种非周期有序运动的理论。在耗散系统和保守系统中,混沌运动有不同表现,前者有吸引子,后者无(也称含混吸引子) 。 1一个生活中典型的例子,一个双摆杆,一端固定,另一端由水平方向开其自由摆动,每次将双摆杆从不同的位置让它自由摆动,到最后变得运动轨迹完全不同。由此看来,双摆杆是具有混沌系统的不可预测性,和初值敏感性,是简单的典型的混沌动力学系统之一。1 维基百科,/wiki/%E6%B7%B7%E6%B2%8C%E7%90%86%E8%AE%BA本科毕业设计3混沌的主要特征:混沌信号某时刻的状态取决于确定的系统方程和整个系统的初始值。具体分为几下几点:(1)初值敏感性:典型的混沌理论中的“蝴蝶效应”中阐述了,在遥远的大洋彼岸,一只蝴蝶的一次翅膀的扇动就可能引发一场大的风暴。也就是说混沌系统对初值十分敏感。任意接近于与无穷小的差异,经过混沌系统的不断放大,最终都将导致完全不同的结果。(2)内在随机性:混沌运动存在内在随机性,混沌系统的随机性是由一组特定的方程产生的,如果给初值赋值相同,那么混沌系统产生的序列是相等的。以最常见的随机性实验-掷硬币为例,我们进行无数次的硬币抛掷,都只能得出其概率,而不能正确预测出下一次得出的结果。硬币实验和混沌系统类似,存在了内在随机性和不可预测性。(3)不可预测性:由于混沌系统的轨道是对初值敏感而且是不稳定的,它是一种现在不能预知未来某一刻会发生什么的动力学系统。由于混沌系统中的混沌吸引子在混沌系统内部会对局部的噪声进行放大,一个微妙的变化也会使系统最后的相轨产生很大偏离;导致了现在和未来没有联系。从数学角度看,系统的序列矢量场和初始条件决定。这就是混沌的不可预测性。在应用科学中,有一定的随机性和不可预测性基本都是同时存在的。这两个概念虽然关系密切但是也存在细微的差别,而且在混沌系统中的不可预测性应该比随机性更重要一点。(4)有界性:混沌吸引子反映了混沌系统的有界性,即混沌的运动轨道是不规则的,不可预测的,但是不管它的是怎么样无序的运动都只是在一个有界的确定的范围内运动,而不会超出这个范围。(5)遍历性:混沌系统的遍历性是指在一段足够长的时间内,混沌迭代值运动轨迹会布集范围内的每一个点即混沌系统产生的迭代值能在指定的区域内全部覆盖。 2.3 混沌加密与密码学Shannon 提出了在密码系统设计中要遵循两个基本原理,分别是序列扩散性和混淆性。扩指的是将明文的内容采用数学统计与概率学里面的一些统计方法,将明文的一些特性统计出来,并计算出分布概率,然后按照这些统计出来的分布规律,按照一定的规则散布到密文中,使得明文的每一位和多位密文都存在联系,从而达到加密效果。混淆是用各种手段方法,给明文和密文之间添加各种复杂的关系,使它们混淆起来,让想破获密文的获取不到密钥,无从下手。最近几年,,因为混沌系统具备了初始条件的敏感性,即给混沌系统输入的初始值稍稍有些不同,则经过系统里的混沌吸引子将噪声放大后,最后得出的迭代值将完全不同。加上混沌序列的伪随机性、序列的不可预测性使得我们根本完全本科毕业设计4预测不到输入一定的初始值后最后会生成什么样的序列。这样破获密码的概率就会大大减小。并且还有非周期性,遍历性等许多优良的密码学特性,所以混沌理论的知识慢慢开始与密码学结合起来了。香农在 1949 年的密码学经典文献中,也阐明了混纯和密码的内在联系:“好的混合变换通常是由两种无法相互替代的操作交替重复生成的”,这正是混沌的典型生成过程。混沌加密与传统密码学有一定的联系,但是在一些随机性和不确定性等一些特性上又相较于传统密码学具备更好的特性。首先,混沌系统中在加密中的应用主要是使用系统产生的序列的不可预测性和序列的伪随机性。而传统加密系统中,明文和密文因为存在一一对应的关系,具有较大的安全隐患,很容易让人破解出来。其次传传统的密码学要加强密钥的安全性总是需要加大加密算法的复杂度,即总是考虑在密钥的安全性和简洁性做出妥协或者折中。而密码的设计原则应该遵守相互互补原则,而不是简单地将计算部件间的安全性抵消掉。所以相较传统密码学而言,混沌序列的初值敏感性和不可预测性就可以很好的协调了系统的安全性和简洁性。2.4 本章小结本章主要介绍了一下混沌理论的形成过程和一些重大的发现,接着给出了混沌的其中一种定义,并列出了一些混沌系统的特性,分别是初值敏感性、内在随机性、不可预测性、有界性和遍历性。最后对比了传统密码学和混沌密码学的区别和混沌密码学相对于传统密码学的优势。本科毕业设计53 种常见的混沌离散系统3.1 Logistic 混沌映射3.1.1 Logistic 混沌映射定义从数学形式上一维 Logistic 映射来看是一个非常简单的混沌映射,此系统具有极其复杂的动力学行为,在保密通信领域的应用十分广泛,其数学表达公式如下:= (1- ) 0,4 0,1 (3-1)1nxnxx其中 0,4被称为 Logistic 参数。研究表明,当 0,1时,Logistic 映射处于混沌状态,也就是说,有初始条件 在 Logistic 映射作用下产生的序列是非0周期的、不收敛的,而在此范围之外,生成的序列必将收敛于某一个特定的值。 23.1.2Logistic 生态背景Logistic 生态背景是“May”虫口模型,即 R.May 在 1963 年建立的理想化生态模型。在相对封闭的环境中,观察某种昆虫的数量的变化。其中昆虫的繁衍方式是父类在一年的春末繁衍下一代,在当年的夏末秋初父类死亡,下一代在下一年重复迭代当前的情况。如图 3.1 和 3.2 所示,当 =4,固定,改变初值 ,观察0x系统的随机分布状态。 图 3.1=4, =0.4,混沌系统分布状态 图 3.2=4, =0.4001,混沌系统分布状态0x 0x由上图可知,在固定的参数 =4 时,图 3.1 的初始值为 =0.4,混沌系统在02 标题:混沌变换及 Logistic 映射 - utopia - 博客频道 - CSDN.NET/askfuhu/article/details/6888799本科毕业设计6有界范围0,1 间得带产生一个伪随机迭代值,对比与图 3.2 初始值为 =0.4001,0x它产生的时序图,跟图 3.1 有很大的差别。以上两张图输入的初值虽然只差了很小的 0.001,那产生的随机分布状态也有很大的差别。以上是对 Logistics 映射的生态模型进行观察统计得到的结论。3.1.3Logistic 映射的特性如图 3-3 所示为 Logistic 映射的 Lyapunov 指数。如图 3-4 所示为参数 =4、 =0.8 时,Logistic 系统的时域波形图。如图 3-5 所示为 Logistic 的分叉0x图。如图 3-6 所示为参数 =3.99 时,Logistic 映射的吸引子图:图 3.3 Logistic 映射的 Lyapunov 指数 图 3.4 =4,x(0)=0.8 Logistic 系统的时域波形图 3.5Logistic 的分叉图 图 3.6 =3.99 时,Logistic 映射的吸引子图 本科毕业设计7李雅普诺夫指数:在 1983 年,格里波基证明了只要最大 Lyapunov 指数大于零,就可以肯定混沌的存在。如图 3.3 中当 =3.7 的时候 Logistic 映射的Lyapunov 指数大于 0。 ,此时系统才产生混沌现象。所以 Logistics 映射并不是一直处于混沌状态的。图 3.4 所示,说明了在系统处于混沌状态时,混沌系统表现出了很好的伪随机性和有界性(在 0 到 1 之间) 。由图 3.5 分岔图可知,在越接近 =4 的时候,迭代映射的范围越接近于满映射,间接说明了混沌系统的遍历性。如图 3.6,在 x 趋向于 0 的时候,有部分值没有覆盖满整个区域,所以 Logistics存在的一个缺点之一就是系统不是满映射。3.2Tent 映射(一维)Tent 混沌映射也是一个非常简单的混沌映射,其主要特征是迭代值在满映射区间的分布非常均匀,非常适合在密码学中使用。其数学表达公式如下:00,则系统处于混沌状态,相较于 Logistics 映射来说,Tent 映射具有更大的参数范围。如图 3.8 所示,Tent 映射也体现出了很好的伪随机性和有界性。Tent 映射突出的特点有迭代值在满映射区间的分布非常均匀,具有良好的随机特性。 3.3 Cubic 映射Cubic 映射的数学表达式如下=a -b (3-3)1nx3由式(3-3)中,存在参数 a, b,整个系统的状态由这两个参数共同决定。因为该系统是由两个参数决定的,所以我们在研究 Cubit 系统的时候往往先固定其中一个参数的值,观察另一个参数,由下图可知,在 a=0. 8 的时候,b(2.2,3)的时候,系统处于混沌状态。在本文中,因为 Cubit 系统是一个二维的本科毕业设计8离散系统,相较于前两个一维混沌系统来说较为复杂,综合要求和性能指标,加上其在混沌加密系统中也较为少见,所以本文暂不深入讨论。如图 3.9 和图 3.10所示,分别为当 b=2.8 时,Cubic 李亚普洛夫指数随 a 改变图和当 a=4 时 Cubic 李亚普洛夫指数随 b 改变图。图 3.9 Cubic 李亚普洛夫指数随 a 改变图,b=2.8 图 3.10 Cubic 李亚普洛夫指数随 b 改变图,a=43.4Logistics 离散系统和 Tent 离散系统的比较表 3-1 Logistics 离散系统和 Tent 离散系统的异同Logistics Tent不同点 1.Logistics 映射定义为有一个参数为, (0, 4)的一维函数。2.迭代值在满映射区间分布不均匀3.由 Lyapunov 指数可知,Logistics 映射的参数取值范围较小。4.数学模型非常简单的混沌系统。1.Tent 映射定义为一个分段函数,其参数为(0 ,2) ,也是一个一维函数。2.迭代之在满映射区间分布均匀,伪随机性很好。3.由 Lyapunov 指数可知,Tent 映射的参数取值范围与 Logistics 映射相比较大。4.数学模型简单,但较Logistics 映射稍复杂。相同点 1.均具备较好的伪随机性和遍历性2.均不是满映射混沌系统。3.5 本章小结本章主要阐述了三种常见的离散混沌系统,分别为 Logistic 映射,Tent 映射,Cubit 映射。其中对 Logistics 映射进行了详细的描述,定义以及生态模型和特性本科毕业设计9的图解分析。并简单介绍了 Tent 映射和 Cubit 映射,最后把 Logistics 映射和 Tent映射进行了简单的对比,通过对比结合实际情况,本文决定采用最经典最简单的Logistics 映射来生成混沌序列。本科毕业设计104 混沌序列和混沌加密算法一个完整的加密系统由序列产生、密钥生成、密钥同步、密钥管理、加密算法组成(安全性) 。混沌加密是我们这次论文的重点之一,利用混沌系统对信号进行加密,我们一般要经过几个步骤。第一,利用混沌系统生成密钥。由上文可知,我们有几个混沌性能较为良好的离散混沌映射,我们选取其中的 Logistics 作为混沌序列生成器,生成的混沌序列直接作为监控系统的密钥。第二,采用简单的异或运算,将密钥和明文异或得到密文。第三,密文通过 TCP/IP 协议传输后,在解密端通过密钥的同步经过解密恢复原始信号。4.1 混沌序列的生成混沌序列的生成有很多方法。可以由模拟电路中的振荡器方法(例如蔡氏电路和模拟 Lorenz 系统的振荡器等)生成序列,产生的连续混沌信号是不可预测的。再由数字化处理器可将这种连续的信号转换为离散的不可预测的混沌序列。软件生成方法是利用一组方程组,通过输入不同的初始值,经过混沌系统后得到一串具有不可预测性的随机的新的序列。为了得到一串新的不可预测的随机序列,其中最常见的就是通过事先拟定好的的规则抽取混沌系统产生的序列的某一位,或某几位,按照一定的方式组合起来形成一串新的序列。按照不同的规则抽取我们将会产生不同的序列,我们通过测试得到混沌性能良好的序列作为监控系统的密钥。因为通过硬件生成混沌序列的方法对硬件要求较高,而且较为复杂不易控制,而软件获取相比而言更常用于我们用来生成混沌序列,可靠性更好,不可预测性也好,而且更简单方便。所以我们这次决定于采用软件生成序列的方法。4.1.1 序列提取步骤:(1)在 Logistics 混沌系统中,为系统赋予一个系统初始值、Logistics 混沌系统的参数取在(0,4) 的区间范围内,给参数赋值,由图 3.5Logistic 的分叉图可知,在 3.5 的时候该系统才表现出良好的混沌特性,所以我们参数取值一般取3.5 以上或者越接近于 4,越趋向于满映射。参数取好后,初始值进入混沌系统,由混沌系统开始迭代,记录每次迭代产生的迭代值。 (2)当我们得到由混沌系统输出的序列后,对这一组序列设定所需序列的转换规则,常用方法有门限法和直接抽取组合法,如本次实验采用门限阀值法,用一个门限值依次去对比混沌序列生成的一组伪随机序列,通过比较后再由二进本科毕业设计11制转换法对每次产生的迭代值进行离散化。即得到一组离散化的序列为密钥的原始序列。具体做法详见 4.1.2。 (3)得到的二进制序列虽然具有一定的伪随机性和具备了作为密钥的最基本的特性,但是仍不能满足我们对加密的要求,所以我们还要对产生的二进制序列进行重新按照一定规则排列,从而得到一组离散混沌序列,这组离散混沌序列将作为密钥的原始序列。4.1.2 混沌序列的抽取规则(1)门限阀值抽取法设混沌映射为= n=1,2,3,4. (4-1)1nxf抽取的混沌序列为 wn,定一个抽取的门限阀值为 t,若规定的映射的第 i 个值 +1t,则抽取值为 1,当 +1=5,则为 1,反之为 0.if(value1 = 5) 本科毕业设计19keysi = 1;else keysi = 0;5.3.3 混沌系统初始值的更新为了使迭代过程中,初始值不同,在每次执行完上述代码后,利用 x+=0.01;改变 x 的值。5.3.4 模块代码如下:/* 混沌密钥发生器(混沌流密码,门限法)* param u * 参数 u* param x* 初始值 x* return* 返回一个 8 位的序列*/public byte getkey(double u, double x) byte keys = new byte8;for (int i = 0; i 0 & x = 5) keysi = 1;else keysi = 0;x+=0.01;else System.out.println(输入 x 的初值不在 0 到 1 区间中);returnnull;return keys;5.4 混沌加密解密模块我们知道传统加密系统在加密过程中为了保证系统的可靠性和安全性,往往本科毕业设计20会花大量的时间和精力去设计各种复杂的算法。即使设计了很高级的加密算法,还有一点是值得我们注意的,就是传统的加密算法一个主要弱点是算法和密钥密切相关。因为现在网络技术不断在进步,不断在普及,更多的人很容易通过网络的发展,再加上一些密码学统计学的知识,很容易获得破解密码的算法,导致加密系统不安全。所以本文采用了混沌加密方法后,虽然混沌加解密模块的算法很简单,因为混沌系统的加密的安全性大部分是利用了混沌系统本身的优秀的不可预测性,随机性和对初值敏感性,所以在加解密模块中只采用了简单的异或运算,代替了传统加密系统复杂的加密算法。进过下面代码的实现我们可以获得加密后的密文信息和解密后的明文信息。代码实现如下:/* 混沌加密模块* param image* param key* return* 密文*/public byte getcrypt(byte image, byte key) byte crypt = new byteimage.length;int k = 0;int i = 0;while(i+k) 0) crypt = client.getcrypt(sendBytes, client.getkey(u, x);dos.write(crypt, 0, length);dos.flush();5.5.2 写文件写文件的过程和读文件的过程类似,只是换作了 IO 流中的 OutputStream 进行处理。函数传入两个参数,一个是把文件写进去的目标路径,另一个是要写的文件的内容。因为考虑到有 IO 传输过来的经过解密的文件是二进制流,所以用一个 byte 类型的数组保存文件内容。fos1 = new FileOutputStream(new File(F:bb.txt);fos2 = new FileOutputStream(new File(F:bbb.txt),true);这里 FileOutputStream 的第二个参数设置为 true,方便信息传输过程中的拼接,不会导致断流。while (length = dis.read(inputByte, 0, inputByte.length) 0) fos2.write(inputByte, 0, length); /密文fos2.flush();Image = server.getImageSource(inputByte, server.getkey(key1, key2);/明文fos1.write(Image, 0, length);fos1.flush();5.6 文件传输模块文件传输模块涉及到客户端能和服务器端通过某种方法建立连接,在连接上以后把文件包装成二进制流进行传输,在这个过程中需要用到 Socket 编程。这里的 Socket 就相当于一个中间转换站,是一个通信链路的端点,服务器端和客户端均与 socket 连接交互,进行信息的传输。所以,在 socket 编程中,在客户端和服务器端通信的过程中建立一个 Server-Client 模型的程序。比如说客户端往OutputStream 写一个数据,那么在服务器端就可以通过 socket.getInputstream 得到一个输入流,读取输入流中的信息性在控制台打印出来,则打印出来的数据便是客户端的输出流中的数据。本科毕业设计23socket 在实现的过程中主要是通过与 IO 流配合完成。在 java API 中提供了两个类,分别是 ServerSocket 和 Socket。开发原理:服务器,在服务器端一般先 new 一个 ServerSocket,并指定一个端口号给它,一般我们指定的端口号要大于 1024。端口号在后面可以和客户端的端口号匹配,然后根据端口号找到同一个进程进行操作。然后再用ServerSocket.accpet 监听等待客户连接请求,客户连接后,产生一个会话,返回一个 socket。在完成会话后,关闭连接。在客户端,直接 new 一个 Socket,给它分配一个 IP 地址和一个端口号,以便可以直接根据 IP 地址找到连接的计算机,然后根据指定的端口号找到某一进程,所以要正确建立连接关系则要求端口号和服务器端的端口号要一致。如果连接成功,打开会话;服务器端便可以与客户端进行交流。会话完成后,关闭 Socket。服务器端 客户端图 5.4 Socket 开发流程图服务器端和客户端创建连接,服务器端关键代码:ServerSocket server = new ServerSocket(8888);System.out.println(创建服务器成功,等待客户端连接.);Socket socket = null;while(true) socket = server.accept(); /等待客户端进行连接System.out.println(有客户端进行连接);ServerThread t = new ServerThread(socket);t.start();/创建线程实现class ServerThread extends Thread private Socket socket = null;InputStream is = socket.getInputStream();OutputStream os = socket.getOutputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is);本科毕业设计24/与客户端建立友好提示(往客户端写提示信息)String msg = 已连接上服务器.;os.write(msg.getBytes();/将指定的字节写入此输出流os.flush();这是服务器端与客户端建立连接的关键代码,首先创建一个 ServerSocket,并分配一个端口号,端口号用来确定客户端和服务器端建立连接的具体进程,然后通过 socket.getInputStream();和 socket.getOutputStream();得到 IO 流,因为视频在网络上传输是用到二进制形式,所以在程序中都是通过 Stream 即字节流获取的,再根据需要将字节流转换成字符流进行相应的处理。客户端关键代码:socket = new Socket(, 8888);InputStream in = socket.getInputStream();OutputStream out = socket.getOutputStream();BufferedReader br = new BufferedReader(new InputStreamReader(in);System.out.println(br.readLine();首先客户端与服务器端建立连接 socket = new Socket(, 8888);IP 为,端口号为 8888,为了验证连接正常,将服务器端传递过来的数据打印出来 System.out.println(br.readLine();。测试如图 5.5 所示:(端口号为 8888)图 5.5 客户端和服务器端正常连接测试成功 ,说明服务器端可以正常连接。将密文传输到服务器端,在之前文件读写的模块中,我们已经有了读文件的代码,在 TCP 传输的过程中,我们只需要将文件返回值 byte类型的数组写到OutputStream 中。客户端关键代码如下:crypt = client.getcrypt(sendBytes, client.getkey(u, x);dos.write(crypt, 0, length);本科毕业设计25服务器端关键代码:InputStream is = socket.getInputStream();inputByte = new byte1024; while (length = dis.read(inputByte, 0, inputByte.length) 0) fos2.write(inputByte, 0, length);fos2.flush(); /读取客户端传过来的明文测试结果如图 5.6 所示:(因为在控制台输出,方便起见就用 a.txt 文件进行测试,主要是确保能实现其功能)图 5.6 服务器加密后密文5.7 密钥同步模块5.7.1 将客户端的初始值和参数传到服务器端密钥同步在整个加密系统中是一个重点内容,其主要考虑如何把客户端的混沌系统的初始值和参数传给服务器端。在本次实验中,采用 IO 流中的DataInputStream 和 DataOutpueStream 实现。查看 API 文档,这两个类可以传递基本数据类型。客户端关键代码:DataOutputStream dos1 = new DataOutputStream(out);DataOutputStream dos2 = new DataOutputStream(out);dos1.writeDouble(client_u);dos2.writeDouble(client_x);分别创建两个 Data 数据流来装混沌系统的初始值和参数值,在用writeDouble 的方法将 double 类型的值装入到数据输出流中。服务器关键代码:DataInputStream dis1 = new DataInputStream(is);DataInputStream dis2 = new DataInputStrea

温馨提示

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

评论

0/150

提交评论