一、实验内容:

1.运行教材上TCP代码,结对进行,一人服务器,一人客户端;

2.利用加解密代码包,编译运行代码,一人加密,一人解密;

3.集成代码,一人加密后通过TCP发送;

注:加密使用AES或者DES/AES或者DES加密密钥key并发送,使用服务器的公钥加密/公钥算法使用RSA或DH/检验发送信息的完整性使用MD5或者SHA3;

4.用Git进行版本控制。

5.完成Blog

我的结对伙伴是20135126谢飞帆

我负责的是客户端,谢飞帆负责的是服务器

二、实验步骤

1.信息安全传送:

发送方A——————>接收方B

A加密时,用B的公钥

B解密时,用B的私钥

  发送方A对信息(明文)采用DES密钥加密,使用RSA加密前面的DES密钥信息,最终将混合信息进行传递。同时用hash函数将明文进行用作验证。

    接收方B接收到信息后,用RSA解密DES密钥信息,再用RSA解密获取到的密钥信息解密密文信息,最终就可以得到我们要的信息(明文)。用hash函数对解出的明文进行验证,与发送过来的has

import java.net.*;

import java.io.*;

import javax.crypto.*;

import java.security.*;

import javax.crypto.Cipher;

public class MyClient {

/**

* @param args the command line arguments

*/

public static void main(String args[]) throws Exception {

//随机密钥产生

KeyGenerator kg=KeyGenerator.getInstance("DESede");

kg.init(168);

SecretKey k=kg.generateKey( );

FileOutputStream  f=new FileOutputStream("key1.dat");

ObjectOutputStream b=new  ObjectOutputStream(f);

b.writeObject(k);

//加密输入

BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

System.out.print("请输入待发送的数据:");

String srt=stdin.readLine();

FileInputStream d=new FileInputStream("key1.dat");

ObjectInputStream a=new ObjectInputStream(d);

Key e=(Key)a.readObject( );

Cipher cp=Cipher.getInstance("DESede");

cp.init(Cipher.ENCRYPT_MODE, e);

byte ptext[]=srt.getBytes("UTF8");

for(int i=0;i<ptext.length;i++){

//    System.out.print(ptext[i]+",");

}

System.out.println("");

byte ctext[]=cp.doFinal(ptext);

for(int i=0;i<ctext.length;i++){

//     System.out.print(ctext[i] +",");

}

FileOutputStream f2=new FileOutputStream("SEnc.dat");

f2.write(ctext);

//发送

try {

//创建连接特定服务器的指定端口的Socket对象

Socket socket = new Socket("192.168.253.1", 4431);

Socket socket1 = new Socket("192.168.253.1", 4430);

//获得从服务器端来的网络输入流

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

//获得从客户端向服务器端输出数据的网络输出流

PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);

PrintWriter out1=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);

//创建键盘输入流,以便客户端从键盘上输入信息

//BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

System.out.print("读取文件中...\n");

FileInputStream f1=new FileInputStream("key1.dat");

FileInputStream f3=new FileInputStream("SEnc.dat");

//String str=stdin.readLine(); //从键盘读入待发送的数据

String str;

out.println(f1);  //通过网络传送到服务器

out1.println(f3);

System.out.print("已发送\n");

str=in.readLine();//从网络输入流读取结果

System.out.println( "从服务器接收到的结果为:"+str); //输出服务器返回的结果

}

catch (Exception v) {

System.out.println(v);

}

finally{

//stdin.close();

//in.close();

//out.close();

//socket.close();

}

}

}

实验截图:

四、实验总结

本次实验是我和结对伙伴一起完成的。起初我们没有任何的实验思路,后来我们通过请教了老师和做出来实验的同学梳理清了头绪,明确了实验步骤和实验要求。把代码组合起来对我们是个不小的挑战,不仅考验了我们的细心程度,还考察了DES算法和RSA加密,在网络连接,传送,反馈上也有很多很难的地方,遇到有问题的地方往往需要上网翻阅很多资料才能找到适合的解决方案,在对代码的不断调试、改进、调试、改进后编译成功。

转载于:https://www.cnblogs.com/vioczw/p/4570338.html

Java网络编程及安全相关推荐

  1. java 密钥工厂 desede_20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代 ...

  2. Java学习总结:52(Java网络编程)

    Java网络编程 开发第一个网络程序 java.net包提供了网络编程有关的开发工具类,在此包中有一下两个主要的核心操作类. ServerSocket类:是一个封装支持的TCP协议的操作类,主要工作在 ...

  3. Java - 网络编程(NetWork)

    Java - 网络编程(NetWork) 一.java.net包下的 InetAddress 类的使用: > 一个 InetAddress 代表着一个IP地址 > 主要用来查看本机的IP和 ...

  4. 【Java】 Java网络编程总结

     一.网络编程三要素: IP地址:每个设备在网络中的唯一标识. 端口号:每个程序在设备上的唯一标识. 协议:为计算机网络中进行数据交换而建立的规则或约定的集合. UDP: 面向无连接,数据不安全,速度 ...

  5. Java网络编程笔记5

    在Java网络编程笔记4中我们看到了客户端与服务器通信的过程,只是在前面的程序只是单个客户端与服务器通信 的例子. 接下来我们看如何实现多个客户端与服务器通信,对于服务器来说,它要为每个客户端请求的S ...

  6. 实验五 Java网络编程及安全 实验报告 20135232王玥

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序与设计         班级:1352 姓名:王玥 学号:20135232 成绩:             指导 ...

  7. NIO详解(一):java网络编程IO总结(BIO、NIO、AIO)

    1.基本概念 在Java网络通信中,最基本的概念就是Socket编程了.Socket又称"套接字" 向网络发出请求或者应答网络请求. Socket 和ServerSocket类库位 ...

  8. 04.Java网络编程(转载)

    1.网络编程 1.1计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输. 按照计算机网络的定义,通过一定的物理设备将处于不同位置的计算机连接起来组成的网络,这个网络中包含 ...

  9. python网络编程视频教程_Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密)...

    Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密) 全面理解BIO/NIO/AIO 网络层编程,是每一个开发者都要面对的技术.课程为解决大家学习网络层知识的难题, ...

  10. 你所需要的java网络编程大总结

    好好学java java知识分享/学习教程免费分享 关注 精彩内容 你所需要的java全套视频教程 你所需要的java电子图书 你所需要的大数据视频教程 你所需要的java练习项目 如 / 梦 上个月 ...

最新文章

  1. Flash气泡回弹效果
  2. fpga如何约束走线_FPGA中的CLOCK REGION和SLR是什么含义
  3. Android进阶:六、在子线程中直接使用 Toast 及其原理
  4. form 多个submit php,一个复杂的PHP表单处理方案?
  5. 生产者/消费者模式(阻塞队列)
  6. Spring AOP详解一文搞懂@Aspect、@Pointcut、@Before、@Around、@After、@AfterReturning、@AfterThrowing
  7. ​TA们划重点的时候到了:什么是实例工作流?
  8. POJ 3370 Halloween treats——鸽巢原理+思维
  9. [Axios] 基于Promise封装属于自己的Ajax库
  10. 【docker学习之二】Docker的基本概念
  11. Oracle中包的创建
  12. FreeCAD项目编译记录(1)
  13. HTML常用字体代码
  14. html上下表格合并单元格,html表格合并单元格的方法_WEB前端开发
  15. 选择排序(java代码实现)
  16. 通过雷达图的面积进行总体对比分析是不可靠的!
  17. 如何查html病毒svchost.exe,网站快照劫持又一例:svchost.exe病毒快照劫持的解决办法...
  18. android面试题之三(红黑联盟)
  19. 分析针对EFS加密文件无法打开的情况数据恢复的解决方式
  20. 在德国观看中文视频的免费网站总结--涵盖几乎中文各类所有视频

热门文章

  1. 牛逼!Redis 的字符串是这样实现的…
  2. 程序员高薪盛宴背后:程序员正在消失?
  3. 我觉得有不少人被Spring带着跑偏了!
  4. 为什么我们需要volatile关键字?
  5. centos(linux) 下如何查看端口占用情况及杀死进程
  6. Spring 5 新增全新的reactive web框架:webflux
  7. OncePerRequestFilter-源码解析
  8. Spring Cloud构建微服务架构(五)服务网关
  9. 框架:HTTP请求的表单提交的几种方式
  10. IO:同步,异步,阻塞,非阻塞