大数据安全 | 【实验】RSA加密解密

news2024/11/24 19:43:42

文章目录

  • 📚关于RSA
  • 📚实验目的
  • 📚流程梳理
    • 🐇Step1:求解乘法逆元
    • 🐇Step2:生成密钥
    • 🐇Step3:加密解密
    • 🐇Step4:最后数据导入
  • 📚实验结果

📚关于RSA

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

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

📚实验目的

  • 编程实现RSA算法对下列数据实现加密与解密:
    • p=3; q=11, e=7; M=5
    • p=5; q=11, e=3; M=9
    • p=7; q=11, e=17; M=8
    • p=11; q=13, e=11; M=7
    • p=17; q=31; e=7; M=2

📚流程梳理

🐇Step1:求解乘法逆元

  • 因为已经给定了p、q、e,所以实际要求的就只剩下乘法逆元d,然后生成密钥函数,再依据算法流程求解即可。
    # 计算a在模m下的乘法逆元
    # 乘法逆元是指对于整数a和模数m,存在一个整数x,使得(a * x) % m = 1
    def modinv(a, m):
       m0, x0, x1 = m, 0, 1
       while a > 1:
          # 计算商q,a%m是余数
          q = a // m
          m, a = a % m, m
          x0, x1 = x1 - q * x0, x0
       return x1 + m0 if x1 < 0 else x1
    
  • modinv(a, m) 接收两个参数 a 和 m,分别代表乘法逆元的基数和模数。
  • 创建变量:m0, x0, x1 = m, 0, 1。这些变量用于存储中间结果和最终结果。m0 是传入的模数m,x0 和 x1 是扩展欧几里德算法中的辅助变量。
  • while 循环:使用除法算法进行迭代,直到 a 变为 1 。在每次循环中进行以下操作:
    • 计算商:q = a // m,将 a 除以 m 的商保存在变量 q 中。
    • 计算余数和更新变量:m, a = a % m, m。m 更新为 a 对 m 取余的结果,a 更新为之前的 m。
    • 更新辅助变量:x0, x1 = x1 - q * x0, x0。根据扩展欧几里德算法的公式更新 x0 和 x1。
  • 返回结果:返回计算得到的结果 x1 + m0(如果 x1 小于 0,则加上 m0),这是乘法逆元。

  1. 背后的理论是扩展的欧几里德算法。欧几里德算法用于计算两个整数的最大公约数,而扩展的欧几里德算法在计算最大公约数的同时,还计算了两个整数的线性组合,也就是计算了乘法逆元。
  2. 在每次循环中,通过除法算法计算出 a 对 m 的余数 q 和新的 a。然后根据扩展欧几里德算法的公式,更新辅助变量 x0 和 x1。
  3. 当 a 变为 1 或者更小时,循环结束,这时 x1 存储的即为乘法逆元。
  4. 最后的返回语句处理了 x1 小于 0 的情况,加上 m0 保证返回的结果是非负的乘法逆元。

🐇Step2:生成密钥

在这里插入图片描述

# 生成密钥函数
def generate_key(p, q, e):
    n = p * q
    fyn = (p - 1) * (q - 1)
    d = modinv(e, fyn)
    # print(d)
    return ((n, e), (n, d))

🐇Step3:加密解密

在这里插入图片描述

# 加密函数
def encrypt(public_key, plaintext):
    n, e = public_key
    # C = M^e mod n
    ciphertext = pow(plaintext, e, n)
    return ciphertext

# 解密函数
def decrypt(private_key, ciphertext):
    n, d = private_key
    # M = C^d mod n
    plaintext = pow(ciphertext, d, n)
    return plaintext

🐇Step4:最后数据导入

# 测试数据
data = [
    {'p': 3, 'q': 11, 'e': 7, 'M': 5},
    {'p': 5, 'q': 11, 'e': 3, 'M': 9},
    {'p': 7, 'q': 11, 'e': 17, 'M': 8},
    {'p': 11, 'q': 13, 'e': 11, 'M': 7},
    {'p': 17, 'q': 31, 'e': 7, 'M': 2}
]

# 对每组数据进行加密与解密
for d in data:
    p, q, e, M = d['p'], d['q'], d['e'], d['M']
    public_key, private_key = generate_key(p, q, e)
    encrypted_text = encrypt(public_key, M)
    decrypted_text = decrypt(private_key, encrypted_text)
    print(f"原始数据: {M}, 加密后: {encrypted_text}, 解密后: {decrypted_text}")

📚实验结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

github使用手册

核心代码 配置用户名/邮箱 best practice git init #在本地初始化一个仓库 git add . #将当前目录所有的文件加入&#xff08;注意这里是加入&#xff09;到缓存区 git commit -m "xxx" #将当前缓存区里的内容提交到本地仓库 git remote add <remote_rep_name&g…

开启学习新时代,电大搜题助您实现梦想!

亲爱的读者朋友们&#xff0c;当您拥有追求知识的渴望&#xff0c;秉持着对成功的执着追求时&#xff0c;浙江开放大学&#xff08;广播电视大学&#xff09;诞生了——它向您开启了一扇通向知识殿堂的大门。而今&#xff0c;我们荣幸地向您推荐一款既简便又高效的学习利器——…

Android设计模式--原型模式

一&#xff0c;定义 原型模式就是用原型实例指定创建对象的种类&#xff0c;并通过拷贝这些原型创建新的对象 也就是说用户从一个实例中复制出一个内部属性一致的对象&#xff0c;这个被复制的对象就是原型。 原型模式多用于创建复杂的或者构造耗时的实例&#xff0c;因为这…

YOLO目标检测——苹果数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;监测果园中苹果的生长情况、水果品质监控、自动化分拣数据集说明&#xff1a;苹果检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(…

淘宝京东优惠券信息API接口系列

获取淘宝优惠券信息接口需要使用淘宝开放平台提供的API接口。以下是获取优惠券信息的步骤&#xff1a; 进入淘宝开放平台&#xff0c;注册并登录账号。在开放平台页面中&#xff0c;找到“优惠券”或“营销工具”等相关的API接口&#xff0c;根据需要进行选择。根据接口文档&a…

计算机组成原理:大而快——层次化存储

原文链接www.xiaocr.fun/index.php/2023/11/14/计算机组成原理大而快-层次化存储/ 引言 关于两种局部性 时间局部性&#xff1a;如果某个数据被访问&#xff0c;那么在不久的将来它可能再次被访问空间局部性&#xff1a;如果某个数据项被访问&#xff0c;与它相邻的数据项可…

接口自动化测试(Python+Requests+Unittest)合集详解教程

&#xff08;1&#xff09;接口自动化测试的优缺点 优点&#xff1a; 测试复用性。维护成本相对UI自动化低一些。回归方便。可以运行更多更繁琐的测试。 自动化的一个明显的好处是可以在较少的时间内运行更多的测试。为什么UI自动化维护成本更高&#xff1f; 因为前端页面变…

工作记录-------MySql主从同步

MySql主从同步简述&#xff1a; MySQL主从同步&#xff0c;可以实现将数据从一台数据库服务器同步到多台数据库服务器。MySQL数据库自带主从同步功能&#xff0c;经过配置&#xff0c;可以实现基于库、表结构的多种方案的主从同步。 Redis是一种高性能的内存数据库&#xff1…

【Hello Go】初识Go语言

初识Go语言 Go语言介绍Go语言是什么Go语言优势Go语言能用来做什么 Go语言环境安装第一个GO语言程序运行Go语言程序 Go语言介绍 Go语言是什么 go语言是是Google开发的一种静态强类型、编译型、并发型&#xff0c;并具有垃圾回收功能的编程语言. 静态类型&#xff1a;在静态类型…

【左程云算法全讲10】打表技巧和矩阵处理技巧

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于左程云算法课程进行的&#xff0c;每个知识点的修正和深入主要参考…

算法笔记-其他高效的技巧与算法(未处理完)

算法笔记-其他高效的技巧与算法 前缀和 前缀和 #include <cstdio> #include <vector> using namespace std; const int MAXN 10000; int n, a[MAXN]; int sum[MAXN] { 0 };int main() {scanf("%d", &n);for (int i 0; i < n; i) {scanf("…

数据银行:安全保障的重要一环

随着信息技术的快速发展&#xff0c;数据银行已经成为了我们日常生活中不可或缺的一部分。它存储了我们的个人信息、财务数据、医疗记录等重要信息&#xff0c;这些信息对于我们的生活和工作至关重要。然而&#xff0c;由于数据的安全性备受关注&#xff0c;因此&#xff0c;对…

JavaWeb——HTML常用标签

目录 1. 标题标签 2. 段落标签 3. 换行/分割线标签 4. 列表标签 4.1. 有序列表 4.2. 无序列表 5. 超链接标签 6. 多媒体标签 6.1. img 图片标签 6.2. audio 音频标签 6.3. video 视频标签 7. 表格标签(重点) 8. 表单标签&#xff08;重点&#xff09; 1. 标题标签 …

【unity插件】UGUI的粒子效果(UI粒子)—— Particle Effect For UGUI (UI Particle)

文章目录 前言插件地址描述特征Demo 演示如何玩演示对于 Unity 2019.1 或更高版本对于 Unity 2018.4 或更早版本 用法基本上是用法使用您现有的 ParticleSystem 预制件带 Mask 或 RectMask2D 组件脚本用法UIParticleAttractor 组件开发说明常见问题解答&#xff1a;为什么我的粒…

计算机组成原理——指令系统题库21-40

21、假定指令地址码给出的是操作数的存储地址&#xff0c;则该操作数采用的是什么寻址。 A、 立即    B、 直接     C、 基址     D、 相对 22、寄存器间接寻址方式的操作数存储在什么中 A、 通用寄存器    B、 存储单元     C、 程序计数器     …

error: C3867: “MainWindow::copyFileCallBack”: 非标准语法;请使用 ““

error: C3867: “MainWindow::copyFileCallBack”: 非标准语法&#xff1b;请使用 “&” 这时候我们按照提示将t.testFun前面加上&又会出现error C2276: “&”: 绑定成员函数表达式上的非法操作&#xff0c; 解决 在函数前面加上static声明

MySQL(16):变量、流程控制与游标

变量 在MySQL数据库的存储过程和函数中&#xff0c;可以使用变量来存储查询或计算的中间结果数据&#xff0c;或者输出最终的结果数据。 在 MySQL 数据库中&#xff0c;变量分为 系统变量 以及 用户自定义变量 。 系统变量 变量由系统定义&#xff0c;不是用户定义&#xff…

缩点+图论路径网络流:1114T4

http://cplusoj.com/d/senior/p/SS231114D 重新梳理一下题目 我们先建图 x → y x\to y x→y&#xff0c;然后对点分类&#xff1a;原串出现点&#xff0c;原串未出现点。 假如我们对一个原串出现点进行了操作&#xff0c;那么它剩余所有出边我们立刻去操作必然没有影响。所…

由于找不到msvcp140.dll无法继续执行代码有哪些解决方法

msvcp140.dll是Microsoft Visual C 2015 Redistributable的一个组件&#xff0c;它是运行许多Windows应用程序所必需的。当msvcp140.dll丢失或损坏时&#xff0c;可能会导致以下问题&#xff1a; 1. 程序无法启动或崩溃。 2. 系统出现错误提示&#xff0c;如“找不到msvcp140…