java 网络 安全_Java网络编程及安全

本文介绍了如何在Java中使用TCP进行安全通信,包括利用DES或AES加密数据,使用RSA进行公钥加密,以及MD5或SHA3确保信息完整性。实验中,作者和伙伴通过Git进行版本控制,分别负责客户端和服务器的实现。实验过程涉及加密解密、网络传输和版本控制等关键步骤,展示了Java在网络安全方面的应用。
摘要由CSDN通过智能技术生成

一、实验内容:

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

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

}

System.out.println("");

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

for(int i=0;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();

}

}

}

实验截图:

23ced5e0c56f66736694ccbaab53c9ae.png

四、实验总结

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值