北京电子科技学院(BESTI)
实 验 报 告
课程:Java 班级: 1353 姓名:郭皓 学号:20135327
成绩: 指导教师:娄嘉鹏 实验日期:2015.6.9
实验密级: 预习程度: 实验时间:15:30~18:00
仪器组次:20 必修/选修:选修 实验序号:04
实验名称: 网络编程与安全
实验目的与要求:
1.掌握Java网络编程的方法;
2.掌握Java安全编程的方法;
3.能综合使用各种技术。
实验仪器:
| 
 名称  | 
 型号  | 
 数量  | 
| 
 Lenovo  | 
 V480  | 
 1  | 
| Lenovo | YOga 13 | 1 | 
统计的PSP(Personal Software Process)时间
| 
 步骤  | 
 耗时(min)  | 
 百分比  | 
| 
 需求分析  | 
 10  | 
 4.17%  | 
| 
 设计  | 
 60  | 
 25%  | 
| 
 代码实现  | 
 120  | 
 50%  | 
| 
 测试  | 
 30  | 
 12.5%  | 
| 
 分析总结  | 
 20  | 
 8.33% 
  | 
一、 实验内容与步骤
实验人员:
客户端 :20135327 郭皓
服务器 :20135329 李海空 http://www.cnblogs.com/haikong/
实验内容:
1 编写网络通信程序(基于TCP)
2 对通信内容使用对称DES加密算法进行加密
3 使用非对称算法分发对称加密中使用的密钥
4 对通信内容进行摘要计算并验证
5 其他安全措施
实验步骤:
1.客户端对信息进行DES加密(使用RSA公钥加密DES密钥)
2.服务器接受信息并解密(使用RSA私钥)
3.验证信息完整性
实验代码:
import java.math.*;
import java.net.*;
import java.security.Key;
import java.io.*;
import javax.crypto.Cipher;
public class Client {
public static void main(String srgs[]) {
try {
Socket socket = new Socket("172.30.113.2", 4421);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter out = new PrintWriter(new BufferedWriter(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 ck = new Enc_RSA().Enc(s);
System.out.println("发送到服务器的加密秘钥为:" + ck);
            String result = DigestCalc.hash(s);
            
            System.out.println("MD5:" + result);
out.println(ck);
out.println(cs);
out.println(result);
} catch (Exception e) {
System.out.println(e);
} finally {
}
    }
    
}
实验截图:



二、实验中遇到的问题及其解决方法
1.发送经过DES加密后的密文时采用的是将其转化为字符串的方式,在这里客户端采用的是toString()函数,服务器采用的是getBytes()函数,传输后的密文出现错误。最后进过讨论使用了二进制转十六进制输出密文。代码如下:
public static String bytesToHexString(byte[] src){ 
    StringBuilder stringBuilder = new StringBuilder("");   
    if (src == null || src.length <= 0) {   
        return null;   
    }   
    for (int i = 0; i < src.length; i++) {   
        int v = src[i] & 0xFF;   
        String hv = Integer.toHexString(v);   
        if (hv.length() < 2) {   
            stringBuilder.append(0);   
       }   
       stringBuilder.append(hv);   
    }   
    return stringBuilder.toString();   
}   
2.两台电脑一直无法联通
在实验室时我们起初是从寝室局域网上用自己的IPv4地址,然后显示连接超时。
我们认为可能是两台电脑没有在同一个网络里而不发链接成功,尝试着用一台电脑连接网络然后wifi给另一台电脑使用,然后再次连接两台电脑,终于连通成功了。
并不知道为什么,可能是因为局域网的原因吧!
原文:http://www.cnblogs.com/20135327leme/p/4570636.html