java 网络安全感知 网络安全学java
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快
实验五 java网络编程及安全
实验内容
- 1.掌握Socket程序的编写;
- 2.掌握密码技术的使用;
- 3.设计安全传输系统。
实验步骤

- 我的结对伙伴是宋歌,我负责的是客户端的部分。
- 1、首先通过在对方的命令行中输入ipconfig得到服务器的ip地址。
- 2、建立一个Socket对象,用来连接特定服务器的指定端口,输入的参数是刚刚获取的ip地址和双方默认的同一端口。注意端口最好不要为8080、8030这些常见的,我们先后使用了10001、10002和9999,最后9999成功了。
Socket socket = new Socket("172.20.10.5", 9999); - 3、使用服务器端RSA的私钥对DES的密钥进行解密,对密钥进行解密之后使用DES对密文进行解密。
- 4、计算解密后的hash值来确定解密是否正确。
注:加密算法、秘钥、Hash函数计算过程均利用的老师提供的代码 - 5、进行匹配连接。
①运行服务器端代码
②显示“服务器已经启动后”运行客户端代码③显示“已经建立连接”就证明双方已经连接好了④客户端输入要传输的信息⑤服务器端显示从客户端接受到的信息⑥双方匹配成功,并在客户端显示“匹配成功”的消息


- 我的客户端显示如下。
- 宋歌的服务器显示如下。
产生的问题及解决
问题1
- 运行后显示错误“系统找不到指定文件”。
- 将
Skey_RSA_pub.dat拷贝至与src同级的文件夹内,为保险起见,把Skey_RSA_priv.dat也一起拷贝到文件夹中。
问题2
- 服务器启动后客户端显示错误
java.net.SocketException: Connection reset(连接重置)。 - 没有关闭上次运行的窗口,端口号被占用,关闭上次运行的窗口后就可以成功了。
问题3
- 服务器启动后客户端显示错误。
- 我们推断可能是网络连接有问题。我们最初同时使用cmcc-edu,结果为连接超时;然后,我们连接同一台手机散发的热点,结果仍然为连接超时;最后,用服务器端的电脑给客户端散发WiFi,结果终于成功。
实验代码如下
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 TCP_Client {
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();// 创建连接特定服务器的指定端口的Socket对象Socket socket = new Socket("172.20.10.5", 9999);//这里输入的是服务器的ip地址和端口号,端口号要注意和服务器保持一致。// 获得从服务器端来的网络输入流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));//RSA算法,使用服务器端的公钥对DES的密钥进行加密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();BigInteger m = new BigInteger(ptext2);BigInteger c = m.modPow(e, n);String cs = c.toString();out.println(cs); // 通过网络将加密后的秘钥传送到服务器//用DES加密明文得到密文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); // 通过网络将密文传送到服务器// 将客户端明文的Hash值传送给服务器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);//通过网络将明文的Hash函数值传送到服务器str = in.readLine();// 从网络输入流读取结果System.out.println("从服务器接收到的结果为:" + str); // 输出服务器返回的结果} catch (Exception e) {System.out.println(e);//输出异常} finally {}}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;
}
}
我的PSP时间
| 步骤 | 耗时 | 百分比 |
| 需求分析 | 10min | 12.5 |
| 设计 | 20min | 25 |
| 代码实现 | 20min | 25 |
| 测试 | 20min | 25 |
| 分析总结 | 10min | 12.5 |
实验心得
通过结对,我认识到了合作的重要性,紧密的合作能够提高我们的能力。代码测试过程中出现很多错误,但经过互相的合作和探讨,加以改进,便成功运行。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

上述所有都有配套的资料,这些资料,对于做【网络安全】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

相关文章:
java 网络安全感知 网络安全学java
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 实验五 java网络编程及安全 实验内容 1.掌握Socket程序的编写;2.掌握密码技术的使用;3.设计安全传输…...
VisionMaster4.4 python脚本 图像处理 转换函数 爱之初体验
最近有接触过一丢丢VM4.3的模块开发. 一直有把python图像处理部分模块移植进来的打算 不过时间不够没来得及折腾.偶尔发现4.4支持py脚本 于是拿来折腾.一下午. 发现4.4支持python脚本,好开心. 首先安装VM4.4 注意一定要是4.4 打开后拖了一个模块. 但是发现import numpy imp…...
Node.js 中的 fs 模块详解
fs(File System)模块是 Node.js 的核心模块之一,用于处理文件系统的操作,包括文件的读取、写入、删除、重命名等。它提供了同步和异步两种操作方式,适用于不同的场景。 1. 前置知识 1.1 文件系统 文件系统是操作系统…...
debezium专栏文章目录
debezium专栏文章目录 第一阶段:基础认知篇 CDC革命:为什么说Debezium改变了数据流动方式? 对比Log-Based/Trigger-Based/Query-Based CDC方案Debezium在数据管道中的战略价值 5分钟部署你的第一个Debezium连接器 使用Docker Compose快速搭…...
python-leetcode 40.二叉树的层序遍历
题目: 给定二叉树的根节点root,返回其节点值得层序遍历(即逐层从左到右访问所有节点) 方法:广度优先搜索 # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val0, leftNone, rightNon…...
蓝桥杯学习大纲
(致酷德与热爱算法、编程的小伙伴们) 在查阅了相当多的资料后,发现没有那篇博客、文章很符合我们备战蓝桥杯的学习路径。所以,干脆自己整理一篇,欢迎大家补充! 一、蓝桥必备高频考点 我们以此为重点学习…...
小米AX3000T 路由器如何开启 SSH 安装 OpenWRT 系统,不需要降级 v1.0.91 (2025)
小米AX3000T 路由器如何开启 SSH 安装 OpenWRT 系统,不需要降级 v1.0.91 (2025) 本文内容需要你有一定的 Linux 操作基础,最好是程序员那种,英文水平足够用才行。一般人不需要使用这么复杂的路由器操作系统,…...
Debezium 报错:“The db history topic is missing” 的处理方法
Debezium 报错:“The db history topic is missing” 的处理方法 一、引言 在使用 Debezium 进行数据同步时,可能会遇到一个常见的错误:“The db history topic is missing”。这个错误表明 Debezium 无法找到或访问其数据库历史记录主题(db history topic),这通常是由…...
水基试剂,湿式化学,清水,干式化学,干粉,卤烃清洁剂,二氧化碳灭火器UL8检测报告标准讲解:
水基试剂,湿式化学,清水,干式化学,干粉,卤烃清洁剂,二氧化碳灭火器UL检测报告标准讲解: 本政策涵盖的灭火器 水基试剂灭火器 水基试剂灭火器使用水基试剂带走燃烧三要素中的热量要素…...
YOLOv11-ultralytics-8.3.67部分代码阅读笔记-build.py
build.py ultralytics\data\build.py 目录 build.py 1.所需的库和模块 2.class InfiniteDataLoader(dataloader.DataLoader): 3.class _RepeatSampler: 4.def seed_worker(worker_id): 5.def build_yolo_dataset(cfg, img_path, batch, data, mode"train"…...
Windows隐藏窗口/开机自启动
目录 使用Start-Process命令控制窗口状态 设置程序开机自启动 使用Start-Process命令控制窗口状态 隐藏窗口运行程序 使用Start-Process命令时,可以通过-WindowStyle Hidden参数让程序在后台运行,窗口不可见。例如: Start-Process D:\note…...
汽车免拆诊断案例 | 2010 款路虎揽胜车空调偶尔出风异常
故障现象 一辆2010款路虎揽胜车,搭载5.0 L发动机,累计行驶里程约为16万km。车主反映,接通空调开关后,有时出风忽大忽小,有时不出风,有时要等2 min左右才出风;有时两三天出现一次,…...
文件IO(20250217)
1. 文件IO 系统调用Linux内核提供的文件操作接口 1. 打开文件 open 2. 读写文件 read/write 3. 关闭文件 close 1.1 open函数 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int open(const char *pathname, int flags); int ope…...
Mac arm架构使用 Yarn 全局安装 Vue CLI
dgqdgqdeMacBook-Pro spid-admin % vue --version zsh: command not found: vue要使用 Yarn 安装 Vue CLI,你可以执行以下命令: yarn global add vue/cli这个命令会全局安装 Vue CLI,让你可以使用 vue 命令创建、管理 Vue.js 项目。以下是一…...
ES6相关操作(2)
一.Promise Promise是ES6引入的异步编程工具。 语法上Promise是一个构造函数,用于封装异步操作并可以获取操作成功或失败的结果 Promise构造函数:Promise(excutor){} Promise的常用函数:then,catch 实例化Promise对象(创建Promise工具) let data"请求数据"//该数据为…...
成员函数定义后面加const是什么功能:C++中const成员函数的作用
成员函数定义后面加const是什么功能:C中const成员函数的作用 前言C中const成员函数的作用总结 前言 在PX4的代码中的位置控制模块中,有这样一个成员函数 void getAttitudeSetpoint(vehicle_attitude_setpoint_s &attitude_setpoint) const;该函数的…...
DeepSeek智能测试助手:分类+推理+导出一站式工具
前言 测试开发工程师在日常工作中需要处理大量测试文档,并且这些文档需要被高效分类、清洗和管理,同时结合强大的 AI 推理能力(如 DeepSeek 模型)进行智能化处理和分析。为此,我们开发了一款基于 PyQt5 的 GUI 工具&a…...
【嵌入式Linux应用开发基础】进程间通信(3):共享内存
目录 一、共享内存核心概念 1.1. 特点 1.2. 适用场景 二、共享内存原理剖析 三、嵌入式 Linux 中共享内存的使用 3.1. 相关函数介绍 3.2. System V共享内存操作步骤 3.3. 同步机制(示例使用System V信号量) 3.4. POSIX共享内存(现代…...
日语学习-日语知识点小记-构建基础-JLPT-N4N5阶段(10): になります :表示从一种状态转变为另一种状态,“变得……”“成为……”
日语学习-日语知识点小记-构建基础-JLPT-N4&N5阶段(10): になります :表示从一种状态转变为另一种状态,“变得……”“成为……” 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)寒くなりました & 元気になりました(2)何(なに)になりたいですか。(…...
计算机毕业设计Python农产品推荐系统 农产品爬虫 农产品可视化 农产品大数据(源码+LW文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Python HTTP 请求工具类 HttpUtils:简化 HTTP 请求的高效工具
在现代的 Web 开发和 API 集成中,HTTP 请求是最常见的操作之一。无论是获取数据、提交表单,还是与 RESTful API 交互,我们都需要频繁地发送 HTTP 请求。为了简化这些操作,提升代码的可读性和可维护性,我们可以使用一个…...
「正版软件」PDF Reader - 专业 PDF 编辑阅读工具软件
PDF Reader 轻松查看、编辑、批注、转换、数字签名和管理 PDF 文件,以提高工作效率并充分利用 PDF 文档。 像专业人士一样编辑 PDF 编辑 PDF 文本 轻松添加、删除或修改 PDF 文档中的原始文本以更正错误。自定义文本属性,如颜色、字体大小、样式和粗细。…...
【linux】文件与目录命令 - grep
文章目录 1. 基本用法2. 常用参数3. 用法举例4. 注意事项5. 正则表达式5.1 正则表达式元字符5.2 正则表达式常用修饰符5.3 正则表达式运算符优先级5.4 正则表达式匹配规则 grep 命令用于在文本文件或标准输入中查找匹配的字符串模式,是一种功能强大的文本搜索工具&a…...
2025鸿蒙开发面试题汇总——通俗易懂
问题和通俗易懂的答案,覆盖鸿蒙开发的核心知识点和实际场景,方便面试时快速评估候选人能力: 一、基础概念(必问) 鸿蒙和安卓最大的区别是什么?举个实际例子。 答案:鸿蒙是“分布式操作系统”&am…...
专利申请流程详解:从创意到授权的完整指南
引言 专利是保护发明创造的重要法律工具,能够为发明人提供独占权,防止他人未经许可使用、制造或销售其发明。无论是个人发明者还是企业,了解专利申请流程都是至关重要的。本文将详细介绍专利申请的完整流程,帮助你从创意到授权&a…...
编写测试计划的六大要素是什么
编写测试计划时,一般需要包括以下六大要素,确保测试工作的完整性和可执行性: 1. 测试目标(Test Objectives) 明确测试的目的,如: 确保系统符合业务需求和技术要求。发现并修复软件缺陷。验证性…...
日期类(完全讲解版)
1. 类的设计思想 Date 类的设计目的是为了封装和处理日期信息,它提供了对日期的基本操作,如日期加减、日期比较、日期合法性检查等。类中的私有成员 int _year, int _month, int _day 存储了日期的年、月、日。 类的声明和构造 Date 类的声明࿱…...
Python网络爬虫技术详解文档
Python网络爬虫技术详解文档 目录 网络爬虫概述爬虫核心技术解析常用Python爬虫库实战案例演示反爬虫机制与应对策略爬虫法律与道德规范高级爬虫技术资源推荐与学习路径1. 网络爬虫概述 1.1 什么是网络爬虫 网络爬虫(Web Crawler)是一种按特定规则自动抓取互联网信息的程序…...
解决服务器上运行YOLO时字体问题
问题描述:运行YOLO时,需要Arial.ttf,由于网络较差,可以先将字体下载到本地,再上传到服务器。 下载地址:项目首页 - Arial字体资源文件下载:本仓库提供了一系列Arial字体的ttf格式文件下载。Arial字体是一种广泛使用的无衬线字体&…...
洛谷 P10726 [GESP202406 八级] 空间跳跃 C++ 完整题解
一、题目链接 P10726 [GESP202406 八级] 空间跳跃 - 洛谷 二、解题思路 我们要对输入的挡板进行排序,按高度从高到低(从小到大)。 排序之后s和t都要更新。 struct Baffle {int l, r;int h;int id; } b[1005];void Sort() {sort(b 1, b 1 n…...
