第4次实验
实 验 报 告
课程:Java 班级: 1353 姓名:王亦可 学号:20135326
成绩: 指导教师:娄嘉鹏 实验日期:2015.6.9
实验密级: 预习程度: 实验时间:15:30~18:00
仪器组次:26 必修/选修:选修 实验序号: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% |
二、实验中遇到的问题及其解决方法
在创建服务器后,客户端无法链接而出现的拒绝访问
解决方法:调整端点名保持一样
实验人员:
服务器 :20135226 黄坤
客户端 :20135326王亦可 http://www.cnblogs.com/baka/
三、实验体会
本次试验遇到一些困难,特别是编程方面,其他的都还好