实验五 TCP传输及加解密
北京电子科技学院(BESTI)
实 验 报 告
课程:Java程序设计 班级:1353 姓名:陈巧然 学号:20135310
成绩: 指导教师:娄嘉鹏 实验日期:2015.6.9
实验密级: 预习程度: 实验时间:15:20-18:00
仪器组次:10 必修/选修: 实验序号:4
实验名称: TCP传输及加解密
实验内容:
1.运行教材上TCP代码,结对进行,一人服务器,一人客户端;
2.利用加解密代码包,编译运行代码,一人加密,一人解密;
3.集成代码,一人加密后通过TCP发送;
注:加密使用AES或者DES/AES或者DES加密密钥key并发送,使用服务器的公钥加密/公钥算法使用RSA或DH/检验发送信息的完整性使用MD5或者SHA3;
4.用Git进行版本控制。
5.完成Blog
实验仪器:
|
名称 |
型号 |
数量 |
| PC | Macbook Air(win7系统) |
1 |
我的结对伙伴是20135311傅冬菁,
博客地址http://www.cnblogs.com/bushifudongjing/
我负责服务器,她负责客户端
一、代码
服务器:
import java.net.*;
import java.io.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
public class MyServer {
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
ServerSocket sc = null;
ServerSocket sc1 = null;
Socket socket=null;
Socket socket1=null;
try {
sc= new ServerSocket(4431);//创建服务器套接字
sc1= new ServerSocket(4430);//创建服务器套接字
System.out.println("端口号:" + sc.getLocalPort());
System.out.println("服务器1已经启动...");
System.out.println("端口号:" + sc1.getLocalPort());
System.out.println("服务器2已经启动...");
socket = sc.accept(); //等待客户端连接
System.out.println("已经建立连接");
socket1 = sc1.accept(); //等待客户端连接
System.out.println("已经建立1连接");
//获得网络输入流对象的引用
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader in1 = new BufferedReader(new InputStreamReader(socket1.getInputStream()));
////获得网络输出流对象的引用
System.out.print("已接收\n");
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
String aline=in.readLine();//读取客户端传送来的数据
String aline1=in1.readLine();
System.out.print("写入文件中...\n");
byte [] bytes = aline.getBytes("GB2312");
byte [] bytes1 = aline1.getBytes("GB2312");
aline = new String(bytes, "GB2312");
aline1 = new String(bytes1, "GB2312");
FileOutputStream s=new FileOutputStream("key1.dat");
s.write(bytes);
FileOutputStream s1=new FileOutputStream("SEnc.dat");
s1.write(bytes1);
System.out.print("已写入文件\n");
//生成解密密钥
FileInputStream f=new FileInputStream("key1.dat");
ObjectInputStream b=new ObjectInputStream(f);
Key k=(Key)b.readObject( );
byte[ ] kb=k.getEncoded( );
FileOutputStream f2=new FileOutputStream("keykb1.dat");
f2.write(kb);
System.out.print("生成解密密钥\n");
// 打印密钥编码中的内容
for(int i=0;i<kb.length;i++){
// System.out.print(kb[i]+",");
}
//解密
FileInputStream a=new FileInputStream("SEnc.dat");
int num=a.available();
byte[ ] ctext=new byte[num];
a.read(ctext);
FileInputStream f1=new FileInputStream("keykb1.dat");
int num2=f1.available();
byte[ ] keykb=new byte[num2];
f1.read(keykb);
SecretKeySpec e=new SecretKeySpec(keykb,"DESede");
Cipher cp=Cipher.getInstance("DESede");
cp.init(Cipher.DECRYPT_MODE, k);
byte []ptext=cp.doFinal(ctext);
String p=new String(ptext,"GB2312");
System.out.print("解密中...\n");
System.out.println(p);
//返回
System.out.println("从客户端接收到信息为:"+p); //通过网络输出流返回结果给客户端
out.println(p);
out.close();
in.close();
sc.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
截图:

二、遇到的问题及怎样解决:
1、将程序包中程序整合时经常容易出现重定义和变量名占用的问题,此时只需要注销掉重复定义的部分或者更改变量名即可,但要注意后来引用部分也需要更改变量名。
2、同时将加密密钥和密文文件打包发送时服务器无法区分两个数据流。重新定义一个新端口4430,将两个文件通过两个不同的端口4431和4430分别发送。
3、文件发送后string型数据无法转换为FileOutputStream型数据,无法写入文件。通过查询资料,按照 GB2312 得到字节(得到多字节字符串)
byte [] bytes = string.getBytes("GB2312");
从字节按照 GB2312 得到 UNICODE 字符串
string = new String(bytes, "GB2312");
用 Stream 类写入已经按照指定编码转化好的字节串
OutputStream os = new FileOutputStream("1.txt");
os.write(bytes);
os.close();
三、实验体会
1.PSP时间
|
步骤 |
耗时 |
百分比 |
|
需求分析 |
1.5h |
21.4% |
|
设计 |
2h |
28.6% |
|
代码实现 |
2h |
28.6% |
|
测试 |
1h |
14.3% |
|
分析总结 |
0.5h |
7.1% |
2.感想
本次实验是我和搭档结对完成的,虽然大部分代码是现成的,但是整合起来却十分的麻烦,要把DES加密、RSA加密的代码整合在一个程序中并且要编译成功是一件十分困难的事情,一不小心就会漏洞百出,而在网络连接,传送,反馈上也有很多很难的地方,遇到有问题的地方往往需要上网翻阅很多资料才能找到适合的解决方案,在对代码的不断调试、改进、调试、改进后编译成功,程序完美联通并运行的时候真是神清气爽。这就是程序猿的乐趣所在。
实验五 TCP传输及加解密的更多相关文章
- 实验五 cmp传输与加解密
---恢复内容开始--- (一)实验内容 1.运行TCP代码,一人服务器,一人客户端 2.下载加解密代码,先编译运行代码,一人加密一人解密. 3.集成代码,一人加密后通过TCP 发送,加密使用DES或 ...
- Java实验五报告——TCP传输及加解密
一.实验内容 1.运行教材上TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代码,一人加密后通过TCP发送: 注:加密使用AES或者D ...
- 实验五 TCP传输及加密
实验内容: 1.运行教材上TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代码,一人加密后通过TCP发送: 注:加密使用AES或者DE ...
- java实验五实验报告
一.实验内容 Cmp传输与加解密 结对编程,一人服务器,一人客户端,服务器向客户端发送经RSA加密的密钥和用密钥加密的密文(使用DES算法),客户端负责接收加密后的密钥和密文,并解密得出明文. 二.实 ...
- Java程序设计实验 实验五
课程:Java程序设计实验 班级:1353 姓名:符余佳源 学号:20135321 成绩: 指导教师:娄嘉鹏 实验日期:2015. ...
- java实验五20135104
课程:Java程序设计 班级:1351 姓名:刘帅 学号:20135104 成绩: 指导教师:娄嘉鹏 ...
- Java实验报告(实验五)
课程:Java程序设计 班级:1351 姓名:王玮怡 学号:20135116 成绩: 指导教师: ...
- 20145328 《Java程序设计》实验五实验报告
20145328 <Java程序设计>实验五实验报告 实验名称 Java网络编程 实验内容 用书上的TCP代码,实现服务器与客户端. 客户端与服务器连接 客户端中输入明文,利用DES算法加 ...
- .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转
.net mvc 站点自带简易SSL加密传输 因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...
随机推荐
- 网站端测试常见BUG
1.翻页 翻页时,没有加载数据为空,第二页数据没有请求 翻页时,重复请求第一页的数据 翻页时,没有图片的内容有时候会引用有图片的内容 2.图片数据为空 图片数据为空时,会保留为空的图片数据位置 3.链 ...
- Objective-C 构造方法 分类 类的深入研究
构造方法 1.对象创建的原理 new的拆分两部曲 Person *p = [Person alloc]; 分配内存(+alloc) Person *p = [p init]; 初始化(-init) 合 ...
- 初学Direct X(9) ——文字的显示
初学Direct X(9) --文字的显示 本次学习如何使用ID3DXFont创建字体,使得我们可以在任何安装了Windows系统中TrueType字体来打印文字,不过最好使用标准字体,这样文字在每一 ...
- [JSON].exists( keyPath )
语法:[JSON].exists( keyPath ) 返回:[True | False] 说明:检测指定键名路径是否存在 示例: Set jsonObj = toJson("{div:{' ...
- docker创建redis镜像
pull redis 镜像 创建redis的镜像有几种方式,可以直接从仓库中拉取,也可以采用dockerfile文件自己编译创建. 基于已有的redis镜像,docker可以采用run,或者creat ...
- java DTO 转 POJO
如果这两个类的要转化的属性其属性名不一样的话,那只能用get和set方法赋值 如果你的两个类要转化的属性名都一样,那可以用org.springframework.beans.BeanUtils这个类来 ...
- C语言中的字符串分割函数
char *strtok(char *s, const char *delim); 分解字符串为一组字符串.s为要分解的字符串,delim为分隔符字符串. 从s开头开始的一个个被分割的串.当没有被分割 ...
- mysql 复杂查询
1.同一个表下多次查询: sql语句: select b.* ,(select name from exh_common.medicine_type a where b.p_id = a.id) as ...
- C与C++,面向过程与面向对象
C与C++在电梯处理上的不同 (注:个人理解) 对比区别: C语言程序制定具体流程,按流程逐步进行. C++程序将过程结构化,需要使用时利用接口访问与调用不同功能的类结构结构. 电梯类代码 电梯类定义 ...
- 福大软工1816:Alpha(5/10)
Alpha 冲刺 (5/10) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务: 文字/口头描述: 1.忙于复习,本次无成果 展示 ...