标签:input serve 分发 DH算法 spec 信息 没有 ext 接收
课程:《程序设计与数据结构》
班级: 1723
姓名: 邓煜坤
学号:20172325
实验教师:王志强
实验日期:2018年6月19日
必修/选修: 必修
两人一组结对编程:
结对编程:1人负责客户端,一人负责服务器
加密结对编程:1人负责客户端,一人负责服务器
密钥分发结对编程:1人负责客户端,一人负责服务器
实验五 网络编程与安全-5
完整性校验结对编程:1人负责客户端,一人负责服务器
两人一组结对编程:
结对编程:1人负责客户端,一人负责服务器
加密结对编程:1人负责客户端,一人负责服务器
密钥分发结对编程:1人负责客户端,一人负责服务器
完整性校验结对编程:1人负责客户端,一人负责服务器
实验感想:在第三个任务的基础上加上了用DH算法进行3DES或AES算法的密钥交换,在最后一个任务中要求用MD5算法,分析信息是否被修改过,当时我忘了截任务4的图,但是因为我们将这两个部分做到了一起,所以就把图接了一个。
```
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.Key;
public class Server_4 {
public static void main(String args[]) {
ServerSocket serverForClient = null;
Socket socketOnServer = null;
DataOutputStream out = null;
DataInputStream in = null;
try {
serverForClient = new ServerSocket(3001);
} catch (IOException e1) {
System.out.println(e1);
}
try {
System.out.println("等待客户呼叫");
socketOnServer = serverForClient.accept(); //堵塞状态,除非有客户呼叫
System.out.println("客户已连接");
out = new DataOutputStream(socketOnServer.getOutputStream());
in = new DataInputStream(socketOnServer.getInputStream());
Key_DH.fun("Spub.txt","Spri.txt");
int len = Integer.parseInt(in.readUTF());
byte np[] = new byte[len];
for (int i = 0;i<len;i++) {
String temp = in.readUTF();
np[i] = Byte.parseByte(temp);
}
ObjectInputStream ois = new ObjectInputStream (new ByteArrayInputStream(np));
Key k2 = (Key)ois.readObject();;
FileOutputStream f2 = new FileOutputStream("Cpub.txt");
ObjectOutputStream b2 = new ObjectOutputStream(f2);
b2.writeObject(k2);
FileInputStream fp = new FileInputStream("Spub.txt");
ObjectInputStream bp = new ObjectInputStream(fp);
Key kp = (Key) bp.readObject();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(kp);
byte[] kb = baos.toByteArray();
out.writeUTF(kb.length + "");
for (int i = 0; i < kb.length; i++) {
out.writeUTF(kb[i] + "");
}
KeyAgree.fun("Cpub.txt","Spri.txt");
String leng = in.readUTF(); // in读取信息,堵塞状态
byte ctext[] = new byte[Integer.parseInt(leng)];
for (int i = 0;i<Integer.parseInt(leng);i++) {
String temp = in.readUTF();
ctext[i] = Byte.parseByte(temp);
}
String check = in.readUTF();
// 获取密钥
FileInputStream f = new FileInputStream("sb.txt");
byte[] keysb = new byte[24];
f.read(keysb);
System.out.println("公共密钥:");
for (int i = 0;i<24;i++) {
System.out.print(keysb[i]+",");
}
System.out.println("");
SecretKeySpec k = new SecretKeySpec(keysb, "DESede");
// 解密
Cipher cp = Cipher.getInstance("DESede");
cp.init(Cipher.DECRYPT_MODE, k);
byte[] ptext = cp.doFinal(ctext);
System.out.println("后缀表达式已被解密:");
for (int i = 0; i < ptext.length; i++) {
System.out.print(ptext[i] + ",");
}
System.out.println("");
// 显示明文
String p = new String(ptext, "UTF8");
String pMd5 = DigestPass.fun(p);
System.out.println("解密后明文的MD5值:"+pMd5);
if (pMd5.equals(check)){
System.out.println("和客户端的MD5值一致");
System.out.println("服务器收到客户的请求:计算后缀表达式" + p);
out.writeUTF(MyDC.jisuan(new StringBuffer(p))+"");
}
else {
System.out.println("警告:和客户端的MD5值不一致!");
}
} catch (Exception e) {
System.out.println("客户已断开" + e);
}
}
}```
通过做这部分实验,我意识到了网络信息加密保护的安全性和重要性,在信息的传递中,会出现很多的泄密漏洞,机密信息和容易被窃取篡改,在这个过程中需要的保护措施就很重要,让我意识到我们需要积极加强网络安全技术的学习。
数据结构的应用
?
20172325 2017-2018-2 《程序设计与数据结构》实验五报告
标签:input serve 分发 DH算法 spec 信息 没有 ext 接收
原文地址:https://www.cnblogs.com/20172325DYK/p/9201144.html