一、    实验内容

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

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

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

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

5.   我的结对伙伴是20135108李泽源 ,我负责的是客户端,李泽源负责的是服务器

 

二、    实验步骤

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

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

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

A加密时,用B的公钥

B解密时,用B的私钥

三、    客户端代码

// 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的信息互传,增强了团队意识。

实际意义大于实验意义。

转载于:https://www.cnblogs.com/20135106song/p/4570449.html

java实验(客户端) 2015106宋世超相关推荐

  1. java实验5_java实验5

    课程:Java程序设计实验   班级:1351             姓名: 李泽源           学号:20135108 成绩:               指导教师:娄嘉鹏         ...

  2. 滴滴宋世君:DS(数据分析师),究竟是做什么的?

    来源:滴滴技术 作者:宋世君 桔妹导读:本文的作者是滴滴出行数据科学部负责人宋世君,曾在 Facebook .Google 核心部门就职,是知名的华人数据分析总监.经世君老师授权在此分享给大家,希望让 ...

  3. Java语言程序设计 :医院简易挂号管理系统 Java实验

    Java语言程序设计 :医院简易挂号管理系统 Java实验 1.课程设计目的 医院预约挂号管理系统是每一个医疗机构管理平常挂号业务流程不可或缺的一个管理信息系统,它的存在解决了病人挂号难.看病难等问题 ...

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

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

  5. bit java实验2_2018-2019-2 20175120 实验五《Java网络编程》实验报告

    实验报告封面 课程:Java程序设计 班级:1751班 姓名:彭宇辰 学号:20175120 指导教师:娄嘉鹏 实验日期:2019年5月26日 实验时间:13:10 - 15:25 实验序号:20 实 ...

  6. java实验3_Java实验3

    实验3 常用类(2学时) 一.实验目的 1. 熟悉Java中的String.StringBuffer.Math.包装器类.Scanner类的使用方法. 2. 使用常用类解决一般性的应用问题. 3. 掌 ...

  7. 云南大学软件学院java实验九_云南大学java实验9

    java实验 (9) 6页 2下载券 Java实验9 4页 2下载券 JAVA实验9 7页 1下载券 java 实验9 暂无评价 1页 免费 Java上机实验9 4页 免费 云大JAVA 实验9图形. ...

  8. java实验报告二_Java实验报告(实验二)

    (1)伪代码  (2)产品代码  (3)测试代码 a.首先在虚拟机中建立一个以自己学号命名的文件夹,以存放自己实验中的代码.运行结果以及截图 2.按照实验说明里的要求,将代码输入,并运行出结果: 做以 ...

  9. Java中的多线程编程(超详细总结)

    文章目录 Java中的多线程编程(超详细总结) 一.线程与多线程的概念 二.线程与进程之间的关系 三.一个线程的生命周期 四.多线程的目的和意义 五.线程的实现的方式 Java中的多线程编程(超详细总 ...

最新文章

  1. Tesla Model汽车架构与FSD供应链
  2. 风口上的政府大数据 需要消除“大误区”
  3. cursor_sharing用法
  4. Redis常用命令入门5:有序集合类型
  5. [LeetCode]547. Friend Circles朋友圈数量--不相邻子图问题
  6. HTTP请求头和响应头部包括的信息有哪些?(转)
  7. 咱也写个小写数字转大写金额 ,纯粹字符串操作实现
  8. sql server外部连接
  9. 5G协议演进(包括3GPP协议版本)
  10. Mac锁屏设置快捷键
  11. c语言编程十进制转八进制算法,C语言十进制如何转八进制?
  12. 如何通过F12开发者工具保存网页中想要的视频资源
  13. ViewPager翻页动画失效详解
  14. 谷歌要抛弃Android拥抱Andromeda
  15. mysql修改时间为东八区,mysql时区设置为东八区
  16. 办理房产证,重要的三张纸
  17. linux用户视角可分为,经济学原理下全球视角尔雅答案
  18. 输入一个长度不超过100的字符串,删除串中的重复字符。
  19. 金山办公测试开发面试总结
  20. 本地宝js爬虫(附代码)

热门文章

  1. 入小学教材、主流编程语言增长最快…… Python 的 2017 回顾
  2. PS合成图片#ps抠图#ps视频教程入门基础学习课程小白
  3. Kafka常用命令收录
  4. Linux中测试Wifi带宽
  5. H5项目常见问题及注意事项
  6. HDOJ(HDU)1000A + B Problem Java题解
  7. arch Linux安装到U盘,把Arch Linux安装到U盘上的具体教程
  8. linux firawll防火墙设置白名单/指定ip访问指定端口
  9. 南昌理工学院计算机科学与技术排名,南昌理工学院排名2018年下滑5名 在民办大学中实力排全国第38名...
  10. 【TA】Unity角色二次元风格渲染