实 验 报 告
课程:Java 班级: 1352 姓名:陈实 学号:20135224
成绩: 指导教师:娄嘉鹏 实验日期:2015.6.9
实验密级: 预习程度: 实验时间:15:30~18:00
仪器组次:24 必修/选修:选修 实验序号:04
实验名称: 网络编程与安全
实验目的与要求:
1.掌握Java网络编程的方法;
2.掌握Java安全编程的方法;
3.能综合使用各种技术。
实验仪器:
名称 | 型号 | 数量 |
计算机 |
| 2 |
实验内容:
1 编写网络通信程序(基于TCP)
2 对通信内容使用对称加密算法进行加密
3 使用非对称算法分发对称加密中使用的密钥
4 对通信内容进行摘要计算并验证
5 其他安全措施
相关代码
客户端:
package net;
import java.math.*;
import java.net.*;
import java.io.*;
public class tcpused {
public static void main(String srgs[]) {
try {
//创建连接特定服务器的指定端口的Socket对象
Socket socket = new Socket("10.0.6.143", 2224);
//获得从服务器端来的网络输入流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//获得从客户端向服务器端输出数据的网络输出W流
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
//创建键盘输入流,以便客户端从键盘上输入信息eredWriter(new OutputStreamWriter(socket.getOutputStream())), true);
//创建键盘输入流
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入待发送的数据:");
String s = stdin.readLine(); //从键盘读入待发送的数据
String cs = new SEnc().enc(s);
System.out.println("发送到服务器的密文为:" + cs);
// String t=Read.read();
String ck = new Enc_RSA().Enc();
System.out.println("发送到服务器的加密秘钥为:" + ck);
String result = DigestCalc.hash(s);
out.println(ck);
out.println(cs); //通过网络传送到服务器
out.println(result);
} catch (Exception e) {
System.out.println(e);
} finally {
//stdin.close();
//in.close();
//out.close();
//socket.close();
}
}
}
服务器:
package net;
import java.net.*;
import java.io.*;
public class tcpuse {
public static void main(String srgs[]) throws Exception {
ServerSocket sc = null;
Socket socket = null;
try {
sc = new ServerSocket(2224);//创建服务器套接字
System.out.println("端口号:" + sc.getLocalPort());
System.out.println("服务器已经启动...");
socket = sc.accept(); //等待客户端连接
System.out.println("已经建立连接");
//获得网络输入流对象的引用
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
获得网络输出流对象的引用
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
String key = in.readLine();
System.out.println("从客户端收到的加密秘钥为:" + key);
byte[] keykb = new Dec_RSA().Dec(key);
String ctext = in.readLine();//读取客户端传送来的数据
System.out.println("从客户端收到的密文为:" + ctext);
String result=SDec.des(ctext, keykb);
String ha = in.readLine();
String sa = DigestCalc.hash(result);
boolean q = Compare.compare(sa, ha);
System.out.println("程序是否完整:" + q);
out.close();
in.close();
sc.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
客户端:
服务端:
链接查看
统计时间
步骤 | 耗时(min) | 百分比 |
需求分析 | 10 | 10% |
设计 | 20 | 20% |
代码实现 | 40 | 40% |
测试 | 10 | 10% |
分析总结 | 20 | 20%
|
二、实验中遇到的问题及其解决方法
在创建服务器后,客户端无法链接而出现的拒绝访问
解决方法:调整端点名保持一样
实验人员:
服务器 :20135224 陈实
客户端 :20135227胡御风 http://www.cnblogs.com/huyufeng/
三、实验体会
本次实验难度相当大,很多问题没有得到及时的解决,浪费了大量的人力物力,比如TCP的使用在书上提供的内容完全无法及时解决无法链接的问题,在后面的代码中,虽然老师几经给出相应的加密代码但运用起来后实现与网络的传送还需要一定的调试。不过通过这次实验极大提高对代码的使用性以及相应的编写技巧。