【网络与信息安全】实验三 RSA加解密与签名验证

article/2025/6/24 5:12:36

实验三、RSA加解密与签名验证


一、实验基本信息

  • 实验名称:RSA加解密与签名验证
  • 实验目的:
    • 理解 RSA 加密解密数字签名验证 的原理。
    • 借助 CyberChef 可视化平台,观察和理解加密与签名背后的数据变化。

二、实验环境

  • 操作系统:Windows 10 / 11
  • 浏览器:Chrome / Firefox
  • 主要工具:
    • CyberChef 网站平台
    • 在线RSA密钥生成器

三、实验过程记录

  • (需要详细说明过程+截图)

OpenSSL安装与配置

1.打开网址https://slproweb.com/products/Win32OpenSSL.html下载OpenSSL的EXE安装包

在这里插入图片描述

2.安装完成后,配置OpenSSL

**在这里插入图片描述
**

3.Windows+R输入cmd打开命令行,输入openssl version查看是否安装成功。

在这里插入图片描述

Part1:RSA加密解密

1.1在OpenSSL目录下,创建一个private目录存放生成的私钥,打开命令行模式,输入以下命令行生成RSA私钥,可以选择生成 1024 或 2048 位的私钥

openssl genpkey -algorithm RSA -out private\private_key.pem -pkeyopt rsa_keygen_bits:2048

在这里插入图片描述

生成的文件private_key.pem如下图所示

在这里插入图片描述

1.2OpenSSL目录下,创建一个public目录存放生成的公钥,在命令行输入以下命令,根据 private目录下的RSA 私钥生成 RSA 公钥,保存于public中

openssl rsa -pubout -in private\private_key.pem -out public\public_key.pem

在这里插入图片描述

1.3打开CyberChef网站https://gchq.github.io/CyberChef/按照如下方式配置RSA加密

1.Data format->To Hex
2.RSA Encrypt
----将刚才生成的公钥文件public_key.pem粘贴至RSA Public Key(PEM)中
----Encryption Schema:RAW
3.Data format->To Base64

在右边Input处输入明文,观察输出的密文,并将加密的密文复制保存

There is Xinjiang University.-_-

在这里插入图片描述

加密后密文:

B95tkqqNa4LxDwAYgzgwrE4i4np/4f2N8CqINTCYbhZHuuMYPiKfJoivFpSNd+HHy2eyV9lPsMOkebNjshG+3+nIiLbjYHveT9gPUQxRrGF38EGRkOt5oryqfex0P0pHxf68ZKq9Gh5rgy/1Ohy2LivvUOvT/duO2iP7tg5lMv0aY2qUa50ioWMFwRu7o1+Z6Z7vHIfPsdeqP0Qiw6bpxXh7a6wKPKnnl7oPJhOQ3lyvmAg1ZC3BCTTlSHaCK4JmykIQqCtEan1f7pNsEietjIWSUqJ9RFGyLrzMwb7Vdj8x30Ha+vRTsqoVQ5MQtEdW44VAWYhuZ6dBQSgihI6uYg==

1.4重新打开一个CyberChef网站https://gchq.github.io/CyberChef/按照如下方式配置RSA解密

1.Data format->From Base64
2.RSA Encrypt
----将刚才生成的私钥文件private_key.pem粘贴至RSA Private Key(PEM)中
----Key password:空
----Encryption Schema:RAW
3.Data format->From Hex

在这里插入图片描述

根据结果显示,解密的结果与加密的明文一致。

Part2:RSA签名验证

  • 继续使用公私钥对(public_key.pem和private_key.pem)

2.1签名操作,打开一个CyberChef网站https://gchq.github.io/CyberChef/

1.RSA sign(签名,而不是加密)
----将刚才生成的私钥文件private_key.pem粘贴至RSA Private Key(PEM)中
----Key password:空
----Message Digest Algorithm:SHA-1
2.Data format->To Base64

输入原始消息(There is Xinjiang University.-_-)

在这里插入图片描述

签名操作之后的内容

Z6ozBKfPyYD2ch67ERDWUnKqTxbvHLhTNICa8arh2/+nhFxyXMU/smcCtGzYZ/Tko3WUnCP4msn7HY3b7t7d8c4ePHCqqTLKIsZ9XLJW/ssnWNRQrRMHBqzggc2fbm82ZhZKDDofkqWsWJlaskVt5sSX0bQKDu9v8XwEo7+zQPmt05huD4GQfvlCBRpqrS1HiKGIYDBIe1XrCHBvlWIgeSkHy+o9CkCgIfMBPnzome+KciJ6diRRHbB1by5ICP5GVLkt3EXl9Apq2TOAR7wap1UGgLUqMS5eGSbq6pg6tFsDob+c/MLbu1V4X9eJU/n9RKUqYJUdcE066Gxh9m9yoA==

2.2验证操作,重新打开一个CyberChef网站https://gchq.github.io/CyberChef/

1.Data format->From Base64
2.RSA verify(验证,而不是解密)
----将刚才生成的公钥文件public_key.pem粘贴至RSA Public Key(PEM)中
----Message:There is Xinjiang University.-_-
----message format:Raw
----Message Digest Algorithm:SHA-1

在这里插入图片描述

输出verified ok,表明验证成功


四、遇到的问题与解决方法

  • 问题描述:存放密钥的目录不存在

    解决方案:如果private目录不存在,OpenSSL不会自动创建它,导致命令失败。因此手动创建private

  • 问题描述:命令中指定的私钥路径 private\private_key.pem 或 private/private_key.pem 不存在

    解决方案:在命令行输入以下命令验证文件是否存在

    dir private\private_key.pem
    
  • 问题描述:验证公钥和私钥是否匹配

    解决方案:输入以下指令,比对输出的内容,查看是否一致

    openssl rsa -pubin -in private/private_key.pem -text -noout
    openssl rsa -pubin -in public/public_key.pem -text -noout
    

五、实验总结

通过本次实验,我深入理解了RSA加密解密与数字签名验证的原理,并成功借助CyberChef可视化平台观察了加密与签名背后的数据变化。在配置CyberChef平台时,通过公钥加密明文并观察其转换为Hex和Base64格式的过程,直观体会了非对称加密的特点;随后使用私钥解密密文,成功还原明文,验证了RSA加解密的可行性。在签名验证环节,利用私钥对消息进行SHA-1签名并转为Base64格式,再通过公钥验证签名有效性,这一流程让我深刻理解了数字签名在保障数据完整性和身份认证中的关键作用。总体而言,本次实验将理论知识与实践操作紧密结合,既巩固了密码学基础概念,又提升了工具使用和问题解决能力,为后续学习网络安全相关技术奠定了扎实基础。


六、实验思考题

  1. 观察结果,与对称密码相比,RSA加解密有什么特点?

    • RSA使用公钥加密、私钥解密(或私钥签名、公钥验签),而对称密码(如AES)使用单一密钥完成加解密。

    • RSA的安全性依赖于大数分解难题,私钥无需传输,避免了对称密码中密钥分发被截获的风险。

    • RSA天然支持数字签名和密钥协商,而对称密码需结合其他机制(如HMAC)实现类似功能。

  2. 介绍RSA加解密与签名的原理
    (1)加解密原理:

    • 选取一对质数,选取的质数的值越大越安全。
    • 计算公共模数n=p*q,如果质数越大,则乘积n越大。乘积n越大。n转换为二进制后对应的加密位数越长。越长的加密位数,越容易引发雪崩效应,以减小数据的关联性。故越安全。
    • 计算欧拉函数**φ(n) = φ(p*q) = (p-1)(q-1)**φ函数计算的是1~n之中的互斥数的个数。
    • 随机选择一个公钥E,其中1<E<φ(N)并且E不是φ(N)因子。
    • 计算私钥D,( E*D )% φ(N)=1。

    (2)签名原理

    • 与加解密相同,生成公钥(n, e)和私钥(n, d)。
    • 发送方用私钥对消息哈希值(如SHA-256)进行加密,生成签名S = H(M)^d mod n。
    • 接收方用公钥解密签名S^e mod n得到H’(M),并与本地计算的H(M)对比,若一致则验证通过。

http://www.hkcw.cn/article/DIEHGZAlZX.shtml

相关文章

HackMyVM-Ephemeral3

信息搜集 主机发现 ┌──(root㉿kali)-[~] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:39:60:4c, IPv4: 192.168.43.126 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.43.1 c6:45:66:05:91:88 …

131. 分割回文串-两种回溯思路

我们可以将字符串分割成若干回文子串&#xff0c;返回所有可能的方案。如果将问题分解&#xff0c;可以表示为分割长度为n-1的子字符串&#xff0c;这与原问题性质相同&#xff0c;因此可以采用递归方法解决。 为什么回溯与递归存在联系&#xff1f;在解决这个问题时&#xff0…

Another Redis Desktop Manager 1.3.7 安装教程 - 详细步骤图解 (Windows)

在安装前需要下载安装包&#xff1a;https://pan.quark.cn/s/2dd4432cefaa 下载安装包 先找到那个叫 Another-Redis-Desktop-Manager.1.3.7.exe 的文件&#xff0c;双击它运行 安装向导 接着会出来安装界面&#xff0c;直接点“下一步”&#xff08;Next&#xff09;继续。 …

ShenNiusModularity项目源码学习(32:ShenNius.Admin.Mvc项目分析-17)

栏目管理页面用于新建、维护及删除系统CMS管理模块的栏目信息&#xff0c;栏目信息用于分类管理文章&#xff0c;其后台控制器类ColumnController位于ShenNius.Admin.Mvc项目的Areas\Cms\Controllers内&#xff0c;页面文件位于同项目的Areas\Cms\Views\Column内&#xff0c;其…

Python(十四)

1.type函数和init_subclass_ init_subclass_ 2.元类 类就是用来创建对象的模版&#xff0c;类是由type创造而来的&#xff0c;元类就是创建类的模版&#xff0c;type可以用来创造类&#xff0c;因为type本身就是一个元类&#xff0c;使用元类来创造类&#xff0c;元类之间也有…

Unity3D仿星露谷物语开发58之保存时钟信息到文件

1、目标 保存当前的时钟信息到文件中。 2、修改TimeManager对象 TimeManager对象添加组件&#xff1a;Generate GUID 3、修改SceneSave.cs脚本 添加1行代码&#xff1a; 4、修改TimeManager.cs脚本 添加&#xff1a; using System; 修改TimeManager类&#xff1a; 添加属…

蓝桥杯java2022年十三届国赛大学A组答案整理

小蓝与钥匙 问题描述 小蓝是幼儿园的老师, 他的班上有 28 个孩子, 今天他和孩子们一起进行了 一个游戏。 小蓝所在的学校是寄宿制学校, 28 个孩子分别有一个自己的房间, 每个房 间对应一把钥匙, 每把钥匙只能打开自己的门。现在小蓝让这 28 个孩子分别将 自己宿舍的钥匙上交…

【Block总结】Dynamic Tanh (DyT)|即插即用|何凯明和Yann LeCun署名

论文信息 Dynamic Tanh (DyT) 是由Meta、NYU、MIT和Princeton的研究团队提出的一种新方法,旨在取代Transformer模型中的归一化层(如LayerNorm和RMSNorm)。论文的核心目标是挑战深度学习中“归一化层不可或缺”的传统认知,提出一种更简单、更高效的替代方案。 DyT 的提出基…

不加载PHP OpenTelemetry SDK实现Trace‌与Logs

目录 前言一、回到OpenTelemetry原理看问题1、数据接收&#xff08;Receivers&#xff09;2、数据处理&#xff08;Processors&#xff09;3、数据导出&#xff08;Exporters&#xff09; 二、不加载OpenTelemetry SDK实现Trace‌与Logs示例 前言 前面两篇我们分别介绍了OpenT…

一文认识并学会c++模板初阶

文章目录 泛型编程&#xff1a;概念 函数模板概念&#xff1a;&#x1f6a9;函数模板格式原理&#xff1a;&#x1f6a9;函数模板实例化与非模板函数共存 类模板类模板实例化 泛型编程&#xff1a; 概念 &#x1f6a9;编写与类型无关的通用代码&#xff0c;是代码复写一种手段…

leetcode刷题日记——二叉树的右视图

[ 题目描述 ]&#xff1a; [ 思路 ]&#xff1a; 二叉树的右视图&#xff1a;即二叉树每层最右边的节点BFS&#xff1a;使用层次遍历&#xff0c;每当遍历到每层最后一个节点时&#xff0c;记录改节点的值运行如下 int* rightSideView(struct TreeNode* root, int* returnS…

python 空气质量可视化,数据分析 + 前后端分离 + ppt 演讲大纲

1. 起因&#xff0c; 目的: 前段时间写的一个小项目&#xff0c;整理为一篇文章&#xff0c;发布出去&#xff0c;然后删掉项目。完整项目&#xff0c;见顶部链接。使用过程&#xff0c; 下面有说明。 2. 先看效果 3. 过程: 后端 python fastapi前端 python plotly # 数据…

|从零开始的Pyside2界面编程|绘图、布局及页面切换

&#x1f411; |从零开始的Pyside2界面编程| 布局及页面切换&#x1f411; 文章目录 &#x1f411; |从零开始的Pyside2界面编程| 布局及页面切换&#x1f411;♈前言♈♈页面切换♈♈页面布局♈♈总结♈ ♈前言♈ 经过两周的学习自己设备的前端也算是完成了一小半了&#xff…

我的世界Java版1.21.4的Fabric模组开发教程(十一)创建方块

这是适用于Minecraft Java版1.21.4的Fabric模组开发系列教程专栏第十一章——创建方块。想要阅读其他内容&#xff0c;请查看或订阅上面的专栏。 方块(Block) 是构成Minecraft世界的主要组成部分&#xff0c;是组成游戏地图的最基本单元&#xff0c;也是模组开发的核心元素之一…

计算机网络:物理层

目录 一、物理层的基本概念 二、物理层下面的传输媒体 2.1 导引型传输媒体 2.1.1 同轴电缆 2.1.2 双绞线 2.1.3 光纤 2.1.4 电力线 2.2 非导引型传输媒体 2.2.1 无线电波 2.2.2 微波 2.2.3 红外线 2.2.4 可见光 三、传输方式 3.1 串行与并行 3.2 同步与异步 3.…

我的世界Java版1.21.4的Fabric模组开发教程(十)更多物品交互行为

这是适用于Minecraft Java版1.21.4的Fabric模组开发系列教程专栏第十章——更多物品交互行为。想要阅读其他内容&#xff0c;请查看或订阅上面的专栏。 在之前的创建自定义数据组件章节中&#xff0c;我们在自定义物品类中重写了来自Item类中的use()方法&#xff0c;实现了在右…

Linux531rsync定时同步 再回忆

rsync定时同步 环境配置 关闭防火墙&#xff0c;selinux systemctl stop firewalld systemctl disable firewall setenforce 0 cat /etc/selinux/configpei SELINUXdisable设置主机名 systemctl set-hostname code systemctl set-hostname backup设置静态IP rsync由于要设…

MySQL数据库复合查询

前言&#xff1a;本文不对SQL查询做详细讲解&#xff0c;而做案例实践&#xff0c;适合已掌握MySQL基础语法&#xff0c;需要通过实际案例巩固技能的开发者。 首先准备这样三张表 雇员信息表、部门信息、薪水等级。如下&#xff1a; 需要库文件的小伙伴私信我哦&#xff01;&am…

STM32 串口通信①:USART 全面理解 + 代码详解

一 前言 本篇文章并不会系统的从零开始讲起&#xff0c;适合大家对USART有一定的学习&#xff0c;再看本篇文章会有一定的收获&#xff0c;祝大家在本文中&#xff0c;吸收到新的知识。 二 通信方式 1&#xff09;按数据传输的方式分&#xff08;这就是“串行 vs 并行”&…

基于图神经网络的自然语言处理:融合LangGraph与大型概念模型的情感分析实践

在企业数字化转型进程中&#xff0c;非结构化文本数据的处理与分析已成为核心技术挑战。传统自然语言处理方法在处理客户反馈、社交媒体内容和内部文档等复杂数据集时&#xff0c;往往难以有效捕获文本间的深层语义关联和结构化关系。大型概念模型&#xff08;Large Concept Mo…