一、    实验内容

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

2、    利用加解密代码包,编译运行代码,客户端加密,服务器解密;

3、    客户端加密明文后将密文通过TCP发送;

4、    加密使用DES,DES加密密钥key发送至服务器,使用服务器的公钥加密,公钥算法使用RSA,检验发送信息的完整性使用MD5

 

二、    实验步骤

1. 本次实验中,需要两台PC机之间互联。一台PC机创建局域网,充当客户端,另一台连入局域网并查询自己的IP地址(ipconfig),充当服务器,然后运行服务器代码,即打开服务器。完成连接之后输入内容即可。

2. 客户端。组合代码,首先需要连入服务器,其中需要修改IP地址和端口。然后创建密钥——按照服务器端口号请求连接——连接成功后传输数据——从键盘读入数据并加密——检查连接状态——请求关闭——关闭。

三、    客户端代码

// file name:ComputeTCPClient.java

import java.net.*;

import java.io.*;

import java.security.*;

import javax.crypto.*;

import javax.crypto.spec.*;

import java.security.spec.*;

import javax.crypto.interfaces.*;

import java.security.interfaces.*;

import java.math.*;

public class ComputeTCPClient {

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

try {

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

kg.init(168);

SecretKey k=kg.generateKey( );

byte[] ptext2=k.getEncoded();

//String kstr=parseByte2HexStr(kb);

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

Socket socket = new Socket("192.168.1.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));

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

ObjectInputStream b2=new ObjectInputStream(f3);

RSAPublicKey  pbk=(RSAPublicKey)b2.readObject( );

BigInteger e=pbk.getPublicExponent();

BigInteger n=pbk.getModulus();

//System.out.println("e= "+e);

//System.out.println("n= "+n);

//byte ptext2[]=kstr.getBytes("UTF8");

BigInteger m=new BigInteger(ptext2);

BigInteger c=m.modPow(e,n);

//System.out.println("c= "+c);

String cs=c.toString( );

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

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

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

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

cp.init(Cipher.ENCRYPT_MODE, k);

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

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

String str=parseByte2HexStr(ctext);

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

String x=s;

MessageDigest m2=MessageDigest.getInstance("MD5");

m2.update(x.getBytes( ));

byte a[ ]=m2.digest( );

String result="";

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

result+=Integer.toHexString((0x000000ff & a[i]) |

0xffffff00).substring(6);

}

System.out.println(result);

out.println(result);

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

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

}

catch (Exception e) {

System.out.println(e);

}

finally{

//stdin.close();

//in.close();

//out.close();

//socket.close();

}

}

public static String parseByte2HexStr(byte buf[]) {

StringBuffer sb = new StringBuffer();

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

String hex = Integer.toHexString(buf[i] & 0xFF);

if (hex.length() == 1) {

hex = '0' + hex;

}

sb.append(hex.toUpperCase());

}

return sb.toString();

}

public static byte[] parseHexStr2Byte(String hexStr) {

if (hexStr.length() < 1)

return null;

byte[] result = new byte[hexStr.length()/2];

for (int i = 0;i< hexStr.length()/2; i++) {

int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);

int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);

result[i] = (byte) (high * 16 + low);

}

return result;

}

}

四、结果截图

五、实验体会

通过本次实验初次尝试了在两台PC之间传输加密信息。本次实验采用了RSA(Pub)算法对DES算法的密钥加密,采用DES算法对明文加密,采用HASH值验证信息的完整性。结对编程,实现了两台PC的信息互传,增强了团队意识。

Java实验五(客户端)的更多相关文章

  1. Java实验五

    20145113 Java实验五 网络编程及安全 实验内容 对于客户端与服务器端:修改原代码,使其可以实现连续的传消息,并且传送文件. 对于加解密部分: 对于原先的加密只加密"hello w ...

  2. 20165310 Java实验五《网络编程与安全》

    20165310 Java实验五<网络编程与安全> 任务一 题目:①编写MyBC.java实现中缀表达式转后缀表达式的功能:②编写MyDC.java实现从上面功能中获取的表达式中实现后缀表 ...

  3. 20165324 Java实验五 网络编程与安全

    20165324 Java实验五 网络编程与安全 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324 指导教师:娄嘉鹏 实验日期:2018年5月28日 实 ...

  4. 2018-2019-2-20175323 java实验五 网络编程与安全

    20175323 java实验五 网络编程与安全 任务一 ①编写MyBC.java实现中缀表达式转后缀表达式的功能 ②编写MyDC.java实现从上面功能中获取的表达式中实现后缀表达式求值的功能 基本 ...

  5. 20165326 java实验五

    实验五 网络编程与安全 一.实验内容 任务一: 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java 这个代码在 ...

  6. java实验五实验报告

    一.实验内容 Cmp传输与加解密 结对编程,一人服务器,一人客户端,服务器向客户端发送经RSA加密的密钥和用密钥加密的密文(使用DES算法),客户端负责接收加密后的密钥和密文,并解密得出明文. 二.实 ...

  7. Java实验五网络编程与安全

    实验五 网络编程与安全 实验准备 博客 活动一 两人一组结对编程: 0. 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 1. 结对实现中缀 ...

  8. java实验五——字符数组、String、StringBuffer的相互转化,StringBuffer的一些方法

    package hello; import java.util.Scanner; public class 实验五 { public static void main(String[] args) { ...

  9. java实验五20145204

    java实验 Tcp传输 实验内容 运行代码一人服务器,一人客户端. 下载加解密代码,先编译运行代码,一人加密一人解密,适当修改代码. 集成代码,一人加密后通过TCP发送,加密使用AES或DES,AE ...

  10. 第七周学习总结&JAVA实验五报告。

    JAVA实验报告五: 实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 J ...

随机推荐

  1. 关于NSStringFromClass的一点见解

    今天做项目的时候遇到一个需求,就是子view视图弹出时,屏蔽掉父view的所有手势,然后想到用 UIGestureRecognizerDelegate代理方法,中间省一些文字(无奈脸),言归正传,NS ...

  2. Activity Monitor 闪退 & 无法进入睡眠

    情况描述 黑苹果主机突然无法进入睡眠. 考虑到可能是后台程序阻碍了系统正常进入睡眠, 于是想要通过Activity Monitor查看系统的活动情况,然而,Activity Monitor闪退. 重 ...

  3. hive介绍、安装配置、表操作基础知识适合小白学习

    1.hive概述 Apache Hive数据仓库软件有助于使用SQL读取,编写和管理驻留在分布式存储中的大型数据集.可以将结构投影到已存储的数据中.提供了命令行工具和JDBC驱动以将用户连接到Hive ...

  4. WPF RichTextBox 自定义文字转超链接

    搬运自StackOverflow private void AddHyperlinkText(string linkURL, string linkName, string TextBeforeLin ...

  5. 基于 Keras 用深度学习预测时间序列

    目录 基于 Keras 用深度学习预测时间序列 问题描述 多层感知机回归 多层感知机回归结合"窗口法" 改进方向 扩展阅读 本文主要参考了 Jason Brownlee 的博文 T ...

  6. JavaWeb基础—EL表达式与JSTL标签库

    EL表达式: EL 全名为Expression Language.EL主要作用 获取数据(访问对象,访问数据,遍历集合等) 执行运算 获取JavaWeb常用对象 调用Java方法(EL函数库) 给出一 ...

  7. 20155211 Exp1 PC平台逆向破解(5)M

    20155211 Exp1 PC平台逆向破解(5)M 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入 ...

  8. tomcat软连接的使用

    软连接说白了就是一个映射.可以映射文件,也可以映射目录.linux和windows都可以做软连接,加入现在把文件A.txt做软连接到B.txt: linux命令如下: ln -s A.txt B.tx ...

  9. CF 258 D. Little Elephant and Broken Sorting

    D. Little Elephant and Broken Sorting 链接 题意: 长度为n的序列,m次操作,每次交换两个位置,每次操作的概率为$\frac{1}{2}$,求m此操作后逆序对的期 ...

  10. [Luogu4182][USACO18JAN]Lifeguards P[单调队列]

    题意 给定 \(n\) 个区间,必须去掉其中的 \(K\) 个,询问能够保留的区间并的最大值. \(n \leq 10^5\ ,K \leq 100\) . 分析 定义状态 \(f_{i,j}\) 表 ...