网络安全---RSA公钥加密与签名

实验项目:RSA公钥加密与签名实验

1.实验目的

本实验的学习目标是让学生获得 RSA 算法的动手经验。 通过课堂学习,学生应该已经了解 RSA 算法的理论部分, 知道在数学上如何生成公钥、私钥以及如何执行加密、解密和签名生成、验证。 通过使用具体数字进行 RSA 算法的每一个基本步骤,他们可以应用课堂上学习到的理论, 并加深对 RSA的理解。 本质上,学生将使用 C 程序语言实现 RSA 算法。

2.实验环境

该实验室已在 SEED Ubuntu 20.04 VM 上进行了测试。您可以从 SEED 网站下载预建映像,并在自己的计算机上运行 SEED VM。但是,大多数 SEED 实验室都可以在云上进行,您也可以按照我们的指示在云上创建 SEED VM。

3.实验内容与步骤

本次实验的具体内容,即实验要验证的问题,以及验证所依据的原理和设计的实验方案;按照实验过程列出实验步骤(涉及编程的,须首先进行算法设计,画出流程图,算法源代码在此处仅仅按功能给出核心代码,完整源代码将工程项目压缩为一个文件作为附件提交,如何不是太长,可以在附录中列印)。

3.0 实验原理或方案

实验所依据的原理或为完成实验目的而设计的实验方案。

3.0 .1验证例子

接下来我们展示一个完整的例子。 在这个例子中,我们初始化三个 BIGNUM 变量 a、b、和 n, 然后计算 a*b(a^b mod n)。 

3.1 生成私钥

设 p、 q 和 e 为三个素数,n = p*q。 我们使用 (e, n) 作为公钥。 请计算私钥 d。 p、 q和 e 的十六进制如下。 注意:尽管本任务中的p 和q非常的大,但它们还没有大到足以保证安全。 为了简单,我们有意让这些数比较小。 在实践中,这些数应当至少有 512 bit,而这里使用的只有 128 bit 。

3.2 加密一条消息

请将(e, n) 作为公钥,加密消息 “1818064057!”(不包括引号)。 我们需要将 ACSII 字符串转换为十六进制字符串, 然后用 BN_hex2bn()将十六进制字符串转换为 BIGNUM。 下面的 python 命令可以用于将原始的ASCII 字符串转换为十六进制字符串。

3.3 解密一条消息

本任务中使用的公私钥对与任务2中的相同。 请解密下面的密文 C,然后转换回ASCII 字符串。

 C = 8C0F971DF2F3672B28811407E2DABBE1DA0FEBBBDFC7DCB67396567EA1E2493F

3.4 为一条消息签名

本任务中使用的公私钥对与任务2中的相同。 请为下面的消息生成一个签名(直接为这条消息签名,而不是它的 Hash ):

   M = "I love you 1"
稍微改动一下 M,例如将 1 改为 2, 然后为修改后的消息签名。 比较两个签名,并描述你的发现。

3.5 验证一个签名

Bob 从 Alice 那里收到一条消息附带了她的签名S 的消息 M =“Launch a missile.”。 我们知道 Alice 的公钥是 (e, n)。 请验证这个签名是否确实是 Alice 生成的。 公钥和签名(十六进制)如下所示:

     M = Launch a missile.
     S = 643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB6802F
     e = 010001 (this hex value equals to decimal 65537)
     n = AE1CD4DC432798D933779FBD46C6E1247F0CF1233595113AA51B450F18116115

假设上面的签名被破坏了,例如签名的最后一个字节从 2F 变成了 3F,也就是说只改变了一个 bit。 请重复这个实验,描述验证过程中发生了什么。

4、实验结果及分析

4.0 验证例子

4.1 生成私钥

生成的私钥为:

d= 3587A24598E5F2A21DB007D89D18CC50ABA5075BA19A33890FE7C28A9B496AEB2

4.2 加密一条消息

加密消息:1818064057

验证结果:发现加密与解密密文一致

4.3 解密一条消息

解密: C = 8C0F971DF2F3672B28811407E2DABBE1DA0FEBBBDFC7DCB67396567EA1E2493F

得到结果:DEC= 50617373776F72642069732064656573

利用Python代码转换成ASCII码,结果为:Password is dees

4.4 为一条消息签名

为消息M = "I love you 1."和M = "I love you 2."签名先利用Python代码转换为16进制,得到:

得到的签名结果如下:

发现:两者加密得到的密文不完全一致,签名的结果不一致。

4.5 验证一个签名

根据签名S = 643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB6802F
和签名S = 643D6F34902D9C7EC90CB0B2BCA36C47FA37165C0005CAB026C0542CBDB6803F
可以得到两个加密的消息:
Message5-1= 4B23486C674E5ECDD6C924382DD378C0E997C3A64ED3A32C5864EB4AFECDE524
Message5-2= 75134ADADC056D5EC6D1F3828238234B4658028E850E3EDCB269B13A09EB00BB

解密Message= 4C61756E63682061206D697373696C652E得到:

解密Message= 91471927C80DF1E42C154FB4638CE8BC726D3D66C83A4EB6B7BE0203B41AC294得到:

可以观察到消息是Alice生成的,但是签名被破坏后消息无法被解密,也就是签名不是Alice生成的,从而避免消息泄露。

5.总结

        通过本次实验,进一步学习和了解了RSA算法,知道了公钥、私钥的产生过程,并且能够更加深入的了解到了明文消息的加密以及解密过程,同时了解了签名算法的相关信息以及需要运用的密码学知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/303685.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字图像处理与交叉学科中名词的拧巴

特征提取 图像处理——对图像、目标或特征点进行定量描述的方法及过程。 模式识别——对原特征进行特征变换,从高维空间到低维空间映射。 特征向量 模式识别、图像处理——一个观测包括多个变量,样本的多个特征组成特征向量。 线性代数——特征值对应的…

构建强健身体的未来:健身管理平台微服务架构解析

在现代社会,人们越来越关注健康和身体素质的提升。健身管理平台应运而生,为用户提供个性化的健身计划、监测和管理工具。微服务架构作为一种灵活且可扩展的系统设计方法,为健身管理平台提供了高效、可靠的基础。 1. 概述健身管理平台微服务架…

python|sort_values()排序

sort_value()可以用来对值(比如说年龄)进行排序 根据 ‘Age’ 列进行升序排序,如果 ‘Age’ 相同则根据 ‘Name’ 列进行降序排序 df_sorted_multi df.sort_values(by[Age, Name], ascending[True, False]) print(df_sorted_multi)

正则表达式 速成

正则表达式的作用 正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字…

Tailwind 4.0 即将到来:前端开发的“速度与激情”

随着前端开发技术的不断进步,我们每天都在寻找更快、更简洁的解决方案来提升我们的开发效率和用户体验。今天,我要为大家介绍一项令人振奋的新技术进展——Tailwind 4.0的来临! 对于经常使用Tailwind的朋友们来说,这个消息无疑是激…

规则引擎之LiteFlow应用

官网地址&#xff1a;LiteFlow DEMO 整体结构 1.引入maven依赖 <dependency><groupId>com.yomahub</groupId><artifactId>liteflow-spring-boot-starter</artifactId><version>2.11.4.2</version> </dependency> 2. 配置yml …

mysql数据库备份脚本.sh

mysql数据库备份脚本.sh #!/bin/bash #备份路径 BAKDIR/home/peter/date %Y-%m-%d #要备份的数据库 MYSQLDBtest #使用哪个用户备份 MYSQLUSRroot #判断是否是root用户执行此脚本 if [ $UID -ne 0 ] then echo This scripts must use the root user!!! sleep 2 exit…

HDFS [MSST‘10] 论文阅读笔记

原论文:The Hadoop Distributed File System (MSST’10) HDFS关键技术要点概览 设计目标:HDFS旨在可靠地存储大型数据集,并以高带宽流式传输这些数据集到用户应用程序。它通过在大量服务器上分布存储和计算资源,使得资源可以随着需求的增长而扩展,同时保持经济高效。架构组…

24年权威数学建模报名通知汇总(含妈妈杯、国赛、美赛、电工杯、数维杯、五一数模、深圳杯......)

1、MathorCup比赛 报名时间&#xff1a;2024年4月11日中午12点&#xff08;周四&#xff09; 比赛开始时间&#xff1a;2024年4月12日上午8时&#xff08;周五&#xff09; 比赛结束时间&#xff1a;2024年4月16日上午9时&#xff08;周二&#xff09; 报名费用&#xff1a…

HarmonyOS 开发-Worker子线程中解压文件

介绍 本示例介绍在Worker 子线程使用ohos.zlib 提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作&#xff0c;解压成功后将解压路径返回主线程&#xff0c;获取解压文件列表。 效果图预览 使用说明 点击解压按钮&#xff0c;解压test.zip文件&#xff0c;显…

基于springboot实现医院管理系统项目【项目源码+论文说明】

基于springboot实现医院管理系统演示 摘要 随着信息互联网信息的飞速发展&#xff0c;医院也在创建着属于自己的管理系统。本文介绍了医院管理系统的开发全过程。通过分析企业对于医院管理系统的需求&#xff0c;创建了一个计算机管理医院管理系统的方案。文章介绍了医院管理系…

RabbitMQ如何保证消息的幂等性???

在RabbitMQ中&#xff0c;保证消费者的幂等性主要依赖于业务设计和实现&#xff0c;而非RabbitMQ本身提供的一种直接功能。 在基于Spring Boot整合RabbitMQ的场景下&#xff0c;要保证消费者的幂等性&#xff0c;通常需要结合业务逻辑设计以及额外的技术手段来实现。以下是一个…

Redis的双写一致性问题

双写一致性问题 1.先删除缓存或者先删除数据库都可能出现脏数据。 2.删除两次缓存&#xff0c;可以在一定程度上降低脏数据的出现。 3.延时是因为数据库一般采用主从分离&#xff0c;读写分离。延迟一会是让主节点把数据同步到从节点。 1.读写锁保证数据的强一致性 因为一般放…

【CVE复现计划】CVE-2024-0195

CVE-2024-0195 简介&#xff1a; SpiderFlow是新一代开源爬虫平台&#xff0c;以图形化方式定义爬虫流程&#xff0c;不写代码即可完成爬虫。基于springbootlayui开发的前后端不分离,也可以进行二次开发。该系统/function/save接口存在RCE漏洞&#xff0c;攻击者可以构造恶意命…

蓝桥杯加训

1.两只塔姆沃斯牛&#xff08;模拟&#xff09; 思路&#xff1a;人和牛都记录三个数据&#xff0c;当前坐标和走的方向&#xff0c;如果人和牛的坐标和方向走重复了&#xff0c;那就说明一直在绕圈圈&#xff0c;无解 #include<iostream> using namespace std; const i…

评论发布完整篇(react版)

此篇文章阐述评论的最新、最热之间的tab标签切换&#xff08;包括当前所在tab标签的高亮显示问题&#xff09;&#xff1b;当前评论的删除&#xff1b;除此之外还延伸了用户的评论实时发布功能。其中最新tab标签所展示的内容是根据当前评论点赞数来进行排序&#xff0c;点赞数量…

人工智能前沿成科技竞争新高地

以下文章来源&#xff1a;经济参考报 近日&#xff0c;首届中国具身智能大会&#xff08;CEAI 2024&#xff09;在上海举行。作为人工智能领域的前沿热点&#xff0c;具身智能正逐步走进现实&#xff0c;成为当前全球科技竞争的新高地、未来产业的新赛道、经济发展的新引擎。 “…

厂房起火3D消防灭火安全救援模拟演练

深圳VR公司华锐视点依托前沿的VR虚拟现实制作、三维仿真和图形图像渲染技术&#xff0c;将参训者带入栩栩如生的火灾现场。佩戴VR头盔&#xff0c;参训者将真切体验火势蔓延的紧张与危机&#xff0c;身临其境地感受火灾的恐怖。 并且消防安全VR虚拟现实演练系统精心模拟了住宅、…

linux网络服务学习(6):多路径multipath解决iscsi多网卡识别错误问题

1.什么是多路径 1.1路径 物理层面一条数据的访问通道 访问方式&#xff1a; &#xff08;1&#xff09;以太网卡双绞网线以太网交换机 &#xff08;2&#xff09;HBA光纤卡光纤线光纤交换机 访问过程&#xff1a; &#xff08;1&#xff09;冗余链路failover&#xff1a…

Linux学习-网络TCP

TCP通信 TCP发端: socket connect send recv close TCP收端: socket bind listen accept send recv close 1.connect int connect(int sockfd, const struct sockaddr *addr, socklen_t …