Java怎么记录网络安全情报 java转网络安全

实验内容

  • 掌握Socket程序的编写;
  • 掌握密码技术的使用;
  • 设计安全传输系统。

实验要求

  • 要求一
  1. 结对实现中缀表达式转后缀表达式的功能 MyBC.java
  2. 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java
  • 要求二
  1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器
  3. 服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  4. 客户端显示服务器发送过来的结果
  • 要求三
  1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器
  3. 服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  4. 客户端显示服务器发送过来的结果
  • 要求四
  1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器
  3. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
  4. 服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  5. 客户端显示服务器发送过来的结果
  • 要求五
  1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5値发送给服务器
  3. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
  4. 服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  5. 客户端显示服务器发送过来的结果

实验步骤

STEP1
  1. 结对实现中缀表达式转后缀表达式的功能 MyBC.java
  2. 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java
实现方法
  • 设立一个栈,存放运算符,首先栈为空;
  • 从左到右扫描中缀式,若遇到操作数,直接输出,并输出一个空格作为两个操作数的分隔符;
  • 若遇到运算符,则与栈顶比较,比栈顶级别高则进栈,否则退出栈顶元素并输出,然后输出一个空格作分隔符;
  • 若遇到左括号,进栈;若遇到右括号,则一直退栈输出,直到退到左括号止。
  • 当栈变成空时,输出的结果即为后缀表达式。
  • 实现结果如下图
STEP2
  1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式通过网络发送给服务器
  3. 服务器接收到后缀表达式,调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  4. 客户端显示服务器发送过来的结果
实现方法
  • 通过调用java.net.*中的Socket类和ServerSocket类实现。

    Socket socket = new Socket("127.0.0.1", 4700);
    ...
    ServerSocket server = null;
    try {
    server = new ServerSocket(4700);
    //创建一个ServerSocket在端口4700监听客户请求

    复制代码
              } catch (Exception e) {
                  System.out.println("can not listen to:" + e);
                  //出错,打印出错信息
              }
              Socket socket = null;
              try {
                  socket = server.accept();
                  //使用accept()阻塞等待客户请求,有客户
    
                  //请求到来则产生一个Socket对象,并继续执行
    
              } catch (Exception e) {
                  System.out.println("Error." + e);
                  //出错,打印出错信息
              }
  • 在TalkClient.java中通过创建MyBC对象receiver,调用中缀转后缀方法exchangexpr().

    ...
    readline =sin.readLine();
    //从系统标准输入读入一字符串
    receiver.exchangexpr(readline));
    ...

    ...
    line = sin.readLine();
    //从标准输入读入一字符串
    os.println(receiver.evaluate(line));
    //向客户端输出该字符串
    ...

STEP3
  1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密后通过网络把密文发送给服务器
  3. 服务器接收到后缀表达式表达式后,进行解密(和客户端协商密钥,可以用数组保存),然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  4. 客户端显示服务器发送过来的结果
实现方法
  • 步骤1如STEP2

  • 通过创建3DES算法的对象,生成密钥并在TalkClient.java中加密。

    ...
    Skey_DES skey_des = new Skey_DES();
    skey_des.key_DES();
    Skey_kb skey_kb = new Skey_kb();
    skey_kb.key();
    /产生密钥/

    复制代码
          SEnc sEnc = new SEnc();

    ...
    readline = SEnc.Enc(receiver.exchangexpr(readline));
    ...

    ...
    SDec sDec = new SDec();
    ...
    readline = SDnc.Dnc(receiver.exchangexpr(readline));
    ...

STEP4
  1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文发送给服务器
  3. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
  4. 服务器接收到后缀表达式表达式后,进行解密,然后调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  5. 客户端显示服务器发送过来的结果
实现方法
  • 步骤1,2,4如同上述STEP

  • DH算法(Diffie-Hellman算法)

    算法描述
    离散对数的概念:
    原根:如果a是素数p的一个原根,那么数值:
    amodp,a^2 modp,...,a^(p-1) modp
    是各不相同的整数,且以某种排列方式组成了从1到p-1的所有整数。
    离散对数:如果对于一个整数b和素数p的一个原根a,可以找到一个唯一的指数 i,使得:
    b =(a的i次方) modp 其中0≦i ≦p-1
    那么指数i称为b的以a为基数的模p的离散对数。
    Diffie-Hellman 算法的有效性依赖于计算离散对数的难度,其含义是:当已知大素数p和它的一个原根a后,对给定的 b,要计算 i ,被认为是很困难的,而给定 i 计算b 却相对容易。
    Diffie-Hellman算法:
    假如用户A和用户B希望交换一个密钥。
    取素数p和整数a,a是p的一个原根,公开a和p。
    A选择随机数XA<p,并计算YA=a^XA mod p。
    B选择随机数XB<p,并计算YB=a^XB mod p。
    每一方都将X保密而将Y公开让另一方得到。
    A计算密钥的方式是:K=(YB) ^XA modp
    B计算密钥的方式是:K=(YA) ^XB modp

STEP5
  1. 基于Java Socket实现客户端/服务器功能,传输方式用TCP
  2. 客户端让用户输入中缀表达式,然后把中缀表达式调用MyBC.java的功能转化为后缀表达式,把后缀表达式用3DES或AES算法加密通过网络把密文和明文的MD5値发送给服务器
  3. 客户端和服务器用DH算法进行3DES或AES算法的密钥交换
  4. 服务器接收到后缀表达式表达式后,进行解密,解密后计算明文的MD5值,和客户端传来的MD5进行比较,一致则调用MyDC.java的功能计算后缀表达式的值,把结果发送给客户端
  5. 客户端显示服务器发送过来的结果
实现方法
  • 步骤1,2,3如同上述STEP

  • 计算明文MD5值通过调用java.security.*中,在TalkClient.java中创建MessageDigest类对象,使用digest()方法得到消息摘要。

    ...
    MessageDigest match = MessageDigest.getInstance("MD5");
    match.update(readline.getBytes());
    byte a[] = match.digest();
    String result = "";
    for (int i = 0; i < a.length; i++) {
    result += Integer.toHexString((0x000000ff & a[i]) | 0xffffff00).substring(6);
    }
    os.println(result);//通过网络将明文的Hash函数值传送到服务器
    is = in.readLine();// 从网络输入流读取结果
    ...

    ...
    String x = sin.readLine();

    复制代码
              MessageDigest m = MessageDigest.getInstance("MD5");
              //使用MD5算法返回实现指定摘要算法的 MessageDigest对象
    
              m.update(x.getBytes());
              byte a[] = m.digest();
              String result = "";
              for (int i = 0; i < a.length; i++) {
                  result += Integer.toHexString((0x000000ff & a[i]) | 0xffffff00).substring(6);
              }
              
              String match = is.readLine();
              if (match.equals(result)) {
                  System.out.println("匹配成功");
              }

    ...

  • 实现结果如下图

总结

本次实验学习了Java的网络安全编程,本学期我们也接触到了计算机网络和密码学的一些知识,将抽象的概念用代码来实现也让我对网络编程有个大概的印象,对一些的基本概念有了初步的理解。网络安全编程将Java与信息安全其他学科相结合,融会贯通,让我对这个专业的理解逐渐加深了。

相关推荐
qzw12102 分钟前
Java与Elasticsearch集成详解,以及使用指南
java·elasticsearch·jenkins
爱的叹息2 分钟前
分别用树型和UML结构展示java集合框架常见接口和类
java·开发语言·uml
马院代表人3 分钟前
Java入职篇(4)——git的使用
java·git·职场和发展
猿六凯16 分钟前
历年云南大学计算机复试上机真题
java·华为od·华为
尽力不摆烂的阿方20 分钟前
《图解设计模式》 学习笔记
java·笔记·学习·设计模式
梦想画家37 分钟前
使用Python Seaborn创建热力图:从核心概念到实战案例
python·信息可视化
Nice2cu_Code1 小时前
Python教程(三):类&对象、闭包、装饰器、类型注解、MRO
开发语言·python
databook1 小时前
manim边学边做--三维图形的场景类
python·动效
调皮的芋头1 小时前
【“以退为进“、“不得已而为之“与“风险对冲“的协同机制】
python·神经网络·机器学习
杜子腾dd1 小时前
18.使用读写包操作Excel文件:xlrd、xlwt 和 xlutils 包
python·数据挖掘·excel·numpy·pandas