Java网络编程及安全

一、实验内容:

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加密,在网络连接,传送,反馈上也有很多很难的地方,遇到有问题的地方往往需要上网翻阅很多资料才能找到适合的解决方案,在对代码的不断调试、改进、调试、改进后编译成功。

时间: 2024-12-15 12:08:49

Java网络编程及安全的相关文章

用java网络编程中的TCP方式上传文本文件及出现的小问题

自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文件给服务端,服务端接收数据并显示“上传成功”给客户端. 客户端: 1 import java.io.BufferedReader; 2 import java.io.FileReader; 3 import java.io.IOException; 4 import java.io.InputStr

Java网络编程基础(六)— 基于TCP的NIO简单聊天系统

在Java网络编程基础(四)中提到了基于Socket的TCP/IP简单聊天系统实现了一个多客户端之间护法消息的简单聊天系统.其服务端采用了多线程来处理多个客户端的消息发送,并转发给目的用户.但是由于它是基于Socket的,因此是阻塞的. 本节我们将通过SocketChannel和ServerSocketChannel来实现同样的功能. 1.客户端输入消息的格式 username:msg    username表示要发送的的用户名,msg为发送内容,以冒号分割 2.实现思路 实现思路与Java网络

java网络编程serversocket

转载:http://www.blogjava.net/landon/archive/2013/07/24/401911.html Java网络编程精解笔记3:ServerSocket详解ServerSocket用法详解 1.C/S模式中,Server需要创建特定端口的ServerSocket.->其负责接收client连接请求. 2.线程池->包括一个工作队列和若干工作线程->工作线程不断的从工作队列中取出任务并执行.-->java.util.concurrent->线程池

20145311实验四 &quot;Java网络编程及安全&quot;

20145311实验四 "Java网络编程及安全" 程序设计过程 实验内容 ·掌握Socket程序的编写:·掌握密码技术的使用:·设计安全传输系统 ·利用加解密代码包,编译运行代码,一人加密,一人解密:·集成代码,一人加密后通过TCP发送: 实验步骤 在这之前进行了一个socket连接的例子:用百度做了个实验 下面是两人合作进行RSA的加密: 首先建立一个Socket对象,用来连接特定服务器的指定端口(我负责的是服务器端,郑凯杰负责的是客户端,所以也就是输入我这边的ip地址),输入的参

java网络编程socket解析

转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在C/S通信模式中,client需要主动创建于server连接的Socket(套接字).服务器端收到了客户端的连接请求,也会创建与客户连接的Socket.Socket可看做是通信两端的收发器.server与client都通过Socket来收发数据. 1.构造Socket 1.Socket() 2.So

20145331实验五 Java网络编程及安全

实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统 4.结队伙伴:20145333赵嘉鑫 博客地址:http://home.cnblogs.com/u/5301z/ 5.分工:自己负责服务端,伙伴负责客户端 实验要求 1.基于Java Socket实现安全传输 2.基于TCP实现客户端和服务器,结对编程一人负责客户端,一人负责服务器 3.使用Git进行版本控制 4.选择对称算法进行数据加解密. 5.选择非对称算法对对称加密密

20145301实验五 Java网络编程及安全

北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.05.06 18:30-21:30 实验名称:实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务器的公钥加密,计算明文的Hash函数值,一起传送给客户端 4.客户端用RSA公钥密码中服务器的私钥解密DES的,秘钥,用秘钥对密文进行解密,得出明文.计算

实验五 Java网络编程及安全

北京电子科技学院 实      验      报      告 课程:移动平台应用开发实践  班级:201592   姓名:曾俊宏  学号:20159210 成绩:___________  指导老师:娄嘉鹏    实验日期 :2015.10.25 实验名称:                          Java 网络编程及安全 实验内容:      1.掌握 Socket程序的编写    2.掌握密码技术的使用    3.设计安全传输系统 我的实验搭档是蔡斌思    http://www.

java网络编程socket\server\TCP笔记(转)

java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅 1 TCP的开销 a  连接协商三次握手,c->syn->s,s->syn ack->c, c->ack->s b  关闭协商四次握手,c->fin->s, s->ack-c,s->fin->c,c->ack->s c  保持数据有序,响应确认等计算开销 d

java网络编程与安全

北京电子科技学院(BESTI) 实     验    报     告 课程:JAVA程序设计  班级:1253   姓名:魏昊卿  小组伙伴:杨舒雯 学号:20135203   伙伴:20135324 成绩:             指导教师:娄嘉鹏          实验日期:2015.6.09 实验密级:  无     预习程度:            实验时间15:30~18:00 仪器组次:         必修/选修:选修                 实验序号:04 实验名称:ja