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

news/2025/2/11 21:45:51/

实验内容

  • 掌握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
实现方法

Java怎么记录网络安全情报 <a class=java转网络安全_git" height="444" src="https://i-blog.csdnimg.cn/img_convert/ec847e54a67a62985534b92aebcb184f.png" width="767" />

  • 设立一个栈,存放运算符,首先栈为空;
  • 从左到右扫描中缀式,若遇到操作数,直接输出,并输出一个空格作为两个操作数的分隔符;
  • 若遇到运算符,则与栈顶比较,比栈顶级别高则进栈,否则退出栈顶元素并输出,然后输出一个空格作分隔符;
  • 若遇到左括号,进栈;若遇到右括号,则一直退栈输出,直到退到左括号止。
  • 当栈变成空时,输出的结果即为后缀表达式。
  • 实现结果如下图
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与信息安全其他学科相结合,融会贯通,让我对这个专业的理解逐渐加深了。


              http://www.ppmy.cn/news/1571248.html

              相关文章

              Gitee AI上线:开启免费DeepSeek模型新时代

              Gitee Al上线&#xff0c;并宣布开启免费DeepSeek模型的时代&#xff0c;这是一个非常值得关注的消息&#xff0c;因 为它标志着国内在AI领域的一个重要发展。DeepSeek模型是由阿里巴巴达摩院开发的&#xff0c;旨 在提供强大的自然语言处理(NLP)能力。下面是一些关于这一事件…

              ES6具体有什么

              在 ES6&#xff08;ECMAScript 2015&#xff09; 中&#xff0c;引入了许多新的特性和改进&#xff0c;旨在提升 JavaScript 的可读性和功能性。以下是一些重要的 ES6 特性&#xff0c;特别是你可能会在日常开发中使用到的&#xff1a; 1. let 和 const let&#xff1a;用于声…

              ARM64 Linux 内核学习指南:从基础到实践

              前言 ARM64 作为当今主流的处理器架构&#xff0c;被广泛应用于移动设备、嵌入式系统和服务器领域。学习 ARM64 在 Linux 内核中的实现&#xff0c;不仅有助于深入理解操作系统底层机制&#xff0c;还能提升在内核开发、驱动编写、虚拟化等领域的专业能力。 本指南面向对 Lin…

              【C/C++】每日温度 [ 栈的应用 ] 蓝桥杯/ACM备赛

              数据结构考点&#xff1a;栈 题目描述&#xff1a; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0…

              linux_kernel驱动开发_驱动调试

              整体框架 调试思路 对比开发板检查差异性。用试波器或万用表调试。配合硬件工程师共同解决问题。 开发思路 先在config中打开相应宏开关。设备树中加入相应配置即可。&#xff08;可以扩展讲解宏开关有无生效&#xff09; 驱动开发 pcie 先lspci查看是否注册成功。然后才…

              DeepSeek在FPGA/IC开发中的创新应用与未来潜力

              随着人工智能技术的飞速发展&#xff0c;以DeepSeek为代表的大语言模型&#xff08;LLM&#xff09;正在逐步渗透到传统硬件开发领域。在FPGA&#xff08;现场可编程门阵列&#xff09;和IC&#xff08;集成电路&#xff09;开发这一技术密集型行业中&#xff0c;DeepSeek凭借其…

              前后端分离项目部署到云服务器、宝塔(前端vue、后端springboot)详细教程

              一、部署介绍 部署的环境是宝塔&#xff08;宝塔9.0.0&#xff09;、阿里云服务器&#xff08;centos 7.6&#xff09;&#xff1b;前端是Vue3项目、后端是springboot3x、jdk11、数据库有redis、mysql&#xff1b;搜索采用的是es。 由于宝塔面板中可以快速进行环境的配置&…

              C# 字符串与正则表达式介绍

              .NET学习资料 .NET学习资料 .NET学习资料 在 C# 编程中&#xff0c;字符串和正则表达式是处理文本数据时不可或缺的工具。深入理解它们的特性和用法&#xff0c;能够显著提升开发效率和代码质量。 一、C# 字符串 &#xff08;一&#xff09;字符串的不可变性 在 C# 中&…