20135333苏正生实验四实验报告

 

课程:

Java程序设计

班级:

1353

姓名:

苏正生

学号:

2015333

成绩:

 

指导教师:

娄家鹏

实验日期:

2015.6.9

实验密级:

 

预习程度:

 

实验时间:

3:20~5:00

仪器组次:

 

必修/选修:

必修

实验序号:

实验四

实验名称:

Java网络编程及安全

实验内容:

1.掌握Socket程序的编写;

2.掌握密码技术的使用;

3.设计安全传输系统。

实验仪器:

 

名称

型号

数量

笔记本电脑

 

 

Msi GS70

 

 

 

1

 

 

 

                 

 

实验准备:

本次实验实行小组两人结对编程,在实验前,我(20135333)与郑伟(20135322)组成小组

分工:苏正生——服务器程序编写调试,以及数据解密、摘要验证

   郑伟——客户端程序编写调试,以及数据的加密,密钥的传递 博客链接:

实验步骤:

1. 基于Java Socket实现安全传输

Socket是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发 TCP/IP网络上的应用程序。

2. 基于TCP实现客户端和服务器,结对编程一人负责客户端,一人负责服务器

服务器:使用ServerSocket监听指定的端口,端口可以随意指定,等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。其中,创建绑定端口的服务器进程后, 当客户端进程的 Socket构造方法返回成功, 表示客户进程的连接请求被加入到服务器进程的请求连接队列中. 虽然客户端成功返回 Socket对象, 但是还没跟服务器进程形成一条通信线路. 必须在服务器进程通过 ServerSocket 的 accept() 方法从请求连接队列中取出连接请求, 并返回一个Socket 对象后, 服务器进程这个Socket 对象才与客户端的 Socket 对象形成一条通信线路.

服务器从 Socket 对象中获得输入流和输出流, 就能与客户交换数据. 当服务器正在进行发送数据的操作时, 如果客户端断开了连接, 那么服务器端会抛出一个IOException 的子类 SocketException 异常。

3. 使用Git进行版本控制

4. 选择对称算法进行数据加解密.

本次实验我们小组采用了RSA公钥密码加密算法,相对来说是一种安全性较高的加密方式

 

5. 选择非对称算法对对称加密密钥进行密钥分发.

KeyGenerator kg=KeyGenerator.getInstance("DESede");
kg.init(168);
SecretKey k=kg.generateKey( );
byte[] ptext2=k.getEncoded();
//String kstr=parseByte2HexStr(kb);

6. 选择MD5算法进行完整性验证.

                        String x=s;
			MessageDigest m2=MessageDigest.getInstance("MD5");
			m2.update(x.getBytes( ));
			byte a[ ]=m2.digest( );
			String result="";
			for (int i=0; i<a.length; i++){
                                result+=Integer.toHexString((0x000000ff & a[i]) | 
				0xffffff00).substring(6);
			}
			System.out.println(result);
			out.println(result);     

  

        String aline3=in.readLine();
		String x=p;
		MessageDigest m2=MessageDigest.getInstance("MD5");
         m2.update(x.getBytes( ));
         byte a[ ]=m2.digest( );
         String result="";
         for (int i=0; i<a.length; i++){
            result+=Integer.toHexString((0x000000ff & a[i]) | 
				0xffffff00).substring(6);
	     }
         System.out.println(result);
		 
		if(aline3.equals(result)){
			System.out.println("匹配成功");

  实验结果:

 

实验心得体会:

      本次程序的关键代码可以参考书上的算法编写。不论是客户端还是服务器,数据流的操作大体上是相同的。同时试验中对于多种密码学密码技术的算法和应用都用代码给出了完整的展示,有利于操作。

      此次设计的是服务器与客户端之间进行通信,老师在我们设计之前讲解的很清晰,使得我们大家操作起来比较娴熟。让我感觉到了软件编程的趣味性和实用性,虽说一些技术我们在课堂上也曾学习过,但是大都停留在理论基础上,实际开发很少,而这次实验给了我们一个很好的边学习边实践的机会,对我们深入学习这些技术有很大的帮助,深刻体会到了这些技术的实用性。

      通过这次试验,我更加深刻的学习了java编程以及操作,在以后的实验以及实际操作中,我相信我能更好使用java进行java程序的编写,同时对于socke编程和安全传输有了全新的认识。

解决问题所参考资料:

1.socket编程是什么。
http://zhidao.baidu.com/link?url=qdcZMpAjpF0sxJo3Jd2iNCBZfl9QYeN2cbF5WGMvyq3qX-CWSUw1EGKKlmey7kKfinySkUCsQdQ4loJ8JNknk_

2.

浅析MD5算法的原理及应用

wenku.baidu.com/link?url=0oRUXrAx2z7zZlqDiHY56hhevNWwSSFARIJNYwz5X8jlW-TRXHgtlb6frnZY7IdMJSvDM7Tyi5q5GyDaQmTzLpI58GSSBJZphd-tvQif1wG
http://wenku.baidu.com/link?url=0oRUXrAx2z7zZlqDiHY56hhevNWwSSFARIJNYwz5X8jlW-TRXHgtlb6frnZY7IdMJSvDM7Tyi5q5GyDaQmTzLpI58GSSBJZphd-tvQif1wG

3.ServerSocket 用法详解(一) - lin49940的专栏 - 博客频道 - CSDN.NET

http://blog.csdn.net/lin49940/article/details/4398364

posted @ 2015-06-12 00:11  苏儿  阅读(332)  评论(0编辑  收藏  举报