安全即时通讯软件论文.docx

上传人:b****5 文档编号:3525911 上传时间:2022-11-23 格式:DOCX 页数:17 大小:312KB
下载 相关 举报
安全即时通讯软件论文.docx_第1页
第1页 / 共17页
安全即时通讯软件论文.docx_第2页
第2页 / 共17页
安全即时通讯软件论文.docx_第3页
第3页 / 共17页
安全即时通讯软件论文.docx_第4页
第4页 / 共17页
安全即时通讯软件论文.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

安全即时通讯软件论文.docx

《安全即时通讯软件论文.docx》由会员分享,可在线阅读,更多相关《安全即时通讯软件论文.docx(17页珍藏版)》请在冰豆网上搜索。

安全即时通讯软件论文.docx

安全即时通讯软件论文

课程设计(论文)说明书

题目:

安全即时通讯软件

学院:

计算机科学与工程学院

专业:

姓名:

学号:

指导教师:

 

2011年09月09日

摘要

随着现代技术的高度快速发展,网络技术的也不断发展,凡事都有两面性,网络技术的高度发展的同时同样会带来负面性,人们的信息得不到安全的保障,为此保护人们的隐私就变得越来越重要。

如人们的个人信息经常通过网络间的传递、电子商务等方面都需要大力的保护,为此信息保密技术也就随之产生。

信息的保密技术主要是由加密技术实现,常见的加密算法有多种,有非对称的RSA、对称的DES、生成消息摘要的MD5等。

为了保护用户之间网络通讯的安全,本系统实现用户之间的安全聊天,聊天消息经过经典的DES加密算法后再传送,这样在网络之间传输的是让人看不懂的密文,采用TCP协议,确保信息的安全,安全稳定,实用性非常高。

Java语言具有简单、安全、可移植、面向对象、健壮、多线程、体系结构中立、解释执行、高性能、分布式和动态等主要特点。

起初java还有一些弊病,但是随着现代技术的高速发展,硬件的限制几乎不再存在。

java本身封装性很好,利用Java语言中秘密密钥工厂对RSA、DES、MD5、算法的支持,使得本系统可以对消息进行加密,生成消息摘要,进行数字签名保存等功能。

关键词:

加密;解密;DES;RSA;MD5;JAVA;安全聊天

 

引言………………………………………………4

1系统的目标及任务……………………………………………6

1.1建设目标……………………………………………………7

1.2系统的主要任务……………………………………………………7

1.3系统性能指标……………………………………………………7

1.4系统化标准要求……………………………………………………7

2系统需求分析……………………………………………………7

2.1系统的详细需求……………………………………………………7

2.2使用环境……………………………………………………11

2.3可行性分析……………………………………………………11

3软件开发过程…………………………………………………12

4关键技术……………………………………………………………11

5软件测试过程……………………………………………………5

5.1测试环境……………………………………………………15

5.2功能测试………………………………………………………16

5.3性能测试………………………………………………………16

6使用说明………………………………………………………16

7结论…………………………………………………………17

参考文献...............................................................................18

引言

随后网络技术的发展,人们的信息安全越来越重要了,这就要对信息进行保密,这来自各方面的压力,黑客入侵,病毒等等都不能是我们的信息保证安全,这就要求我们对重要的信息进行加密,让别人就算获取这些信息也不能明白这些信息的含义,真正做到保密性。

对于对称算法来说,无论是从实用性还是从安全性,DES算法无疑是一个好的选择。

但是对于非对称算法来说RSA也是一个很好的算法加密。

对于获取消息摘要的来MD5和SHA-1都是不错的选择。

DES(dataencryptionStandard)是一种世界标准的加密形式,已经15年历史了,虽然有些老,可还算是比较可靠的算法。

在七十的初期,随着计算机之间的通信发展,需要有一种标准密码算法为了限制不同算法的激增使它们之间不能互相对话。

为解决这个问题,美国国家安全局(N.S.A)进行招标。

I.B.M公司开发了一种算法,称为:

Lucifer。

经过几年的研讨和修改,这种算法,成为了今天的D.E.S,1976年11月23日,终于被美国国家安全局采用。

D.E.S是分块加密的,将明文分割成64BITS的块,然后它们一个个接起来。

它使用56位密钥对64位的数据块进行加密,并对64bits的数据块进行16轮编码。

与每轮编码时,一个48bits的“每轮”密钥值由56bits的完整密钥得出来。

DES用软件进行解码需要用很长时间,而用硬件解码速度非常快,1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。

所以,当时DES被认为是一种十分强壮的加密方法,所以对于不是很高机密行的信息,一般都可以用之进行加密了。

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。

  RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。

即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。

RSA的缺点主要有:

A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

B)分组长度太大,为保证安全性,n至少也要600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。

目前,SET(SecureElectronicTransaction)协议中要求CA采用2048bits长的密钥,其他实体使用1024比特的密钥。

C)RSA密钥长度随着保密级别提高,增加很快。

RSA为非对称算法,适用于数字签名。

数字签名(DigitalSignature)技术是非对称加密算法的典型应用。

数字签名的应用过程是,数据源发送方使用自己的私钥对数据校验或其他与数据内容有关的变量进行加密处理,完成对数据的合法“签名”,数据接收方则利用对方的公钥来解读收到的“数字签名”,并将解读结果用于对数据完整性的检验,以确认签名的合法性。

数字签名技术是在网络系统虚拟环境中确认身份的重要技术,完全可以代替现实过程中的“亲笔签字”,在技术和法律上有保证。

在数字签名应用中,发送者的公钥可以很方便地得到,但他的私钥则需要严格保密。

随着信息技术和计算机网络技术的发展,其应用涉及到政府、军事、文教、商业、金融等诸多领域。

如商业经济信息系统、政府机关信息系统、银行业务系统、证券业务系统、科研数据传输等,这些系统都涉及到机密信息的传输与存储。

信息时代虽然带给我们无限的商机与方便,但也充斥着隐患与危险。

由于网络容易受到攻击,导致机密信息的泄密,轻则引发企业、部门工作陷于瘫痪而造成巨大的经济损失,重则危及国家、军事安全和社会稳定。

所以网络信息安全已成为保证国民经济信息化建设健康发展的基础,直接关系到国家的安全,其影响重大。

如何保证机密信息不泄漏,鉴别信息来源的真实性,确保信息的完整性和不可抵赖性,就是网络信息安全研究需要解决的问题。

网络安全的目标应当满足:

身份真实性、信息机密性、信息完整性、服务可用性、不可否认性、系统可控性、系统易用性、可审查性等等。

数字签名技术是网络安全的重要手段之一,它可以保证信息完整性、鉴别发送者的身份真实性与不可否认性;再运用数字签名本身的基础技术如加密技术可以保证信息机密性;如再运用审计日志的办法,可完成可审查性的功能。

数字签名技术是当前网络安全领域的研究热点。

数字签名的特性及可防御的网络威胁可以概括为:

身份鉴别,可鉴别信源的真实性而防止冒充;数据完整性保护,抵御数据的篡改或重排;不可抵赖性,信源事后不可否认以防止其抵赖;一般还使用加密技术保护信息机密性,以防截听攻击;加入流水号等技术,可防重放攻击。

所以,数字签名技术满足网络安全的目标即身份真实性、信息机密性、信息完整性、服务可用性、不可否认性、系统可控性、系统易用性、可审查性等等。

特别是其身份鉴别、数据完整性和不可抵赖性在电子商务、电子政务等应用领域中有很重要的作用[1]。

作为网络安全的关键性技术之一,数字签名在社会生活的各个领域也都具有十分广阔的应用前景。

1991年,Rivest开发出技术上更为趋近成熟的md5算法。

它在MD4的基础上增加了"安全-带子"(safety-belts)的概念。

虽然MD5比MD4稍微慢一些,但却更为安全。

这个算法很明显的由四个和MD4设计有少许不同的步骤组成。

在MD5算法中,信息-摘要的大小和填充的必要条件与MD4完全相同。

Denboer和Bosselaers曾发现MD5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。

Vanoorschot和Wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(brute-forcehashfunction),而且他们猜测一个被设计专门用来搜索MD5冲突的机器(这台机器在1994年的制造成本大约是一百万美元)可以平均每24天就找到一个冲突。

但单从1991年到2001年这10年间,竟没有出现替代MD5算法的MD6或被叫做其他什么名字的新算法这一点,我们就可以看出这个瑕疵并没有太多的影响MD5的安全性。

上面所有这些都不足以成为MD5的在实际应用中的问题。

并且,由于MD5算法的使用不需要支付任何版权费用的,所以在一般的情况下(非绝密应用领域。

但即便是应用在绝密领域内,MD5也不失为一种非常优秀的中间技术),MD5怎么都应该算得上是非常安全的了。

MD5用的是哈希函数,在计算机网络中应用较多的不可逆加密算法有RSA公司发明的MD5算法和由美国国家技术标准研究所建议的安全散列算法SHA。

1系统的目标及任务

1.1建设目标

安全即时通讯软件依据开发要求对人们日常信息进行保密的开发的,符合人们的要求标准,采用多线程开发模式,用户之前可以随意发送通讯消息,省去了一人一句的局面。

本系统可以实现安全消息传递,因为传递的消息都是进过用DES加密生成的密文传送的,即使攻击者截获了消息,没有密钥也不能获取消息内容。

本系统还能对消息生成消息摘要,然后用使用者的油非对称算法RSA生成的私钥进行消息摘要签名,让使用者对消息具有不可否认性的功能,保持消息的完整性和不可篡改性。

1.2系统的主要任务

安全即时通讯软件主要任务就是要能够使用户之前建立了连接之后可以任意发送聊天消息,消息的发送是没有限制的,对信息进行保密,能对信息进行加密解密,应用于聊天的信息,在网络中传输的都是以密文传输的,所以安全性可以说是很好,应该让使用者具有不可否认性得功能,用使用者的私钥来进行消息摘要签名。

1.3系统性能指标

安全即时通讯软件是采用Java语言来实现的,Java语言用得广泛,具有跨平台性。

其中用的加密算法是DES、和RSA、MD5、,对于聊天消息加密,采用对称算法DES进行加密,对于消息保存用哈希算法MD5进行消息摘要的生成,然后用非对称算法RSA进行签名,这样就很好的结合,这样的结合具有安全,不可否认性。

1.4系统标准化要求

安全即时通讯软件是针对现实中的具体要求而设计的,系统所实现的功能都是又javaJDK中提供的标准算法,是符合设计要求的,具有标准性。

2系统需求分析

2.1系统的详细需求

2.1.1功能需求

安全即时通讯软件设计的目的就是为了人们信息的保密性,可以让不是自己授权的人们无法获取其信息来对信息进行保密。

软件设计符合现实状况的需求,能对信息信息加密解密和安全聊天,在网络中传输的都是密文,如果没有解密密钥的话,就不能真正的获取里面的消息内容,可以对一般的字符串和文件进行加密解密,可以进行一对一的安全聊天。

2.1.2使用范围

安全即时通讯软件是针对现实状况而设计的,具有使用的广泛性,使用界面有良好的提示,用户只要根据提示一步一步使用即可,无须担心使用不方便的问题存在。

2.1.3业务流程

具体如图:

 

 

注册登录(验证用户名和密码)

 

 

图2-1业务流程图

2.1.4用户界面

开始界面:

用户输入密钥进行匹配,正确的就进入聊天界面

图2-2客户登录界面

 

通讯界面-------客户端(安全聊天),:

用户双发建立连接后可以进行安全通信

图2-3客户—客户端聊天界面

客户端在控制台输出消息密文:

传输过程中以密文形式进行

图2-4客户—客户端控制台输出

通讯界面-------服务器(安全聊天)

图2-5客户—服务器聊天界面

服务器在控制台输出消息密文:

图2-6客户—服务器端控制台输出

聊天记录保存:

用户可以查看自己发送过的消息密文,并对消息密文存档和签名

图2-7消息保存界面

在e:

\下有message.txt文件:

该文件记录这用户本次的整个聊天记录

图2-8消息保存本地界面

message.txt文件内容为:

图2-9消息具体内容

2.1.5输出要求

安全即时通讯软件输出都是通过在界面上显示.对用户不合法的输入会有向的提示能,比如客户端如果输入的IP和端口号不可用的时候,会提示无法与固定的IP进行连接通话。

图2-10无法连接对方提示

在保存聊天记录的时候,如果忘记输入路径的话,会提示:

图2-11消息保存路径不对提示

当保存记录成功的时候会提示:

图2-12消息密文保存成功提示

当用户通过发送byte要求结束通话的时候,消息发送编辑框提示和发送按钮都不可用:

图2-13结束通话状态提示

2.1.6故障处理

安全即时通讯软件针对可以出现的异常都进行捕获,如果出项异常也不会对软件有所影响,所以有很好的故障处理能力,不用担心存在着不可预测的不可用性。

2.2使用环境

网络环境:

安全即时通讯软件对网络有一定的要求,能够进行网络聊天。

硬件环境:

笔记本,电脑性能只要一般就OK了,要有JAVA虚拟机即可;软件环境:

JAVA虚拟机。

其他系统关系:

win7、XP等都可以。

2.3可行性分析

技术可行性:

安全即时通讯软件所用的开发语言是具有平台无异性的java语言,具有很好的扩展性,对操作系统没有什么硬性的要求,能跑一般的程序即可。

软件中所用到的加密算法都是有安全性保证的,无需担心其安全性问题。

经济可行性:

安全即时通讯软件有很好的操作性,能对公司企业的信息进行加密保密,预防中重要的信息泄密,当然具有很好的经济可行性。

人员可行性:

只要对电脑有稍微熟悉的,对自己工作有一定了解的人都可以进行操作,不担心用户不会用的问题存在。

影响系统开发的因素:

暂时没有发现。

3系统设计

数据功能设计:

功能模块图:

图3-1功能模块图

4关键技术

(1)DES加解密:

//确定算法和初始化密钥和加密解密工具

publicDes(StringstrKey)throwsException{

Keykey=getKey(strKey.getBytes());

encryptCipher=Cipher.getInstance("DES");//获得加密工具

encryptCipher.init(Cipher.ENCRYPT_MODE,key);//初始化加密工具

decryptCipher=Cipher.getInstance("DES");//获得解密工具

decryptCipher.init(Cipher.DECRYPT_MODE,key);初始化解密工具

}

//字符串加密方法

publicbyte[]encrypt(byte[]arrB)throwsException{

returnencryptCipher.doFinal(arrB);

}

//字符串解密方法

publicbyte[]decrypt(byte[]arrB)throwsException{

returndecryptCipher.doFinal(arrB);

}

//将byte数组转化为十六进制

publicStringbyteArr2HexStr(byte[]arrB)throwsException{

intiLen=arrB.length;

//每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍

StringBuffersb=newStringBuffer(iLen*2);

for(inti=0;i

intintTmp=arrB[i];

//把负数转换为正数

while(intTmp<0){

intTmp=intTmp+256;

}

//小于0F的数需要在前面补0

if(intTmp<16){

sb.append("0");

}

sb.append(Integer.toString(intTmp,16));

}

returnsb.toString();

}

//将十六进制转化为byte数组

publicstaticbyte[]hexStr2ByteArr(StringstrIn)throwsException{

byte[]arrB=strIn.getBytes();

intiLen=arrB.length;

//两个字符表示一个字节,所以字节数组长度是字符串长度除以2

byte[]arrOut=newbyte[iLen/2];

for(inti=0;i

StringstrTmp=newString(arrB,i,2);

arrOut[i/2]=(byte)Integer.parseInt(strTmp,16);

}

returnarrOut;

}

(2)RSA加解密

//产生密钥方法

publicvoidcreateKey()throwsNoSuchAlgorithmException,

FileNotFoundException,IOException{

/**为RSA算法创建一个KeyPairGenerator对象*/

KeyPairGeneratorkeyPairGen=KeyPairGenerator.getInstance("RSA");

/**利用上面的随机数据源初始化这个KeyPairGenerator对象*/

keyPairGen.initialize(1024);

/**生成密匙对*/

KeyPairkeyPair=keyPairGen.generateKeyPair();

/**得到公钥*/

KeypublicKey=keyPair.getPublic();

/**得到私钥*/

KeyprivateKey=keyPair.getPrivate();

/**用对象流将生成的密钥写入文件*/

ObjectOutputStreamoos1=newObjectOutputStream(newFileOutputStream(PUBLIC_KEY_FILE));

ObjectOutputStreamoos2=newObjectOutputStream(newFileOutputStream(PRIVATE_KEY_FILE));

oos1.writeObject(publicKey);

oos2.writeObject(privateKey);

/**清空缓存,关闭文件输出流*/

oos1.close();

oos2.close();

}

//字符串加密方法

publicbyte[]encrypt(byte[]b)throwsException{

ObjectInputStreaminputStream=newObjectInputStream(

newFileInputStream(PRIVATE_KEY_FILE));

key=(Key)inputStream.readObject();

inputStream.close();

/**得到Cipher对象来实现对源数据的RSA进行数字签名*/

Ciphercipher=Cipher.getInstance("RSA");

cipher.init(Cipher.ENCRYPT_MODE,key);

/**执行加密操作*/

byte[]b1=cipher.doFinal(b);

returnb1;

}

//字符串解密方法:

publicbyte[]decrypt(byte[]buf)throwsException{

ObjectInputStreaminputStream=newObjectInputStream(

newFileInputStream(PUBLIC_KEY_FILE));

key=(Key)inputStream.readObject();

inputStream.close();

/**得到Cipher对象对已用私钥签名的数据进行RSA解密*/

Ciphercipher=Cipher.getInstance("RSA");

cipher.init(Cipher.DECRYPT_MODE,key);

/**执行解密操作*/

byte[]b=cipher.doFinal(buf);

returnb;

}

(3)MD5消息摘要

//生成消息摘要方法

privateStringencrypt(StringinputText){

try{

//获得MD5摘要类

MessageDigestm=MessageDigest.getInstance("md5");

//将消息转换为字节数组

m.update(inputText.getBytes("UTF8"));

//生成消息摘要字节数组

bytes[]=m.digest();

returnhex(s);

}catch(NoSuchAlgorithmExceptione){

e.printStackTrace();

}catch(UnsupportedEncodingExceptione){

e.printStackTrace();

}

returnnull;

}

(4)安全聊天

//消息发送方法

publicvoidsendData()throwsException{

PrintWriterout=newPrintWriter(newBufferedWriter(

//获取对输出流(发送数据)的控制

newOutputStreamWriter(socket.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1