RSA加密

import math
from sympy import primerange#
def are_coprime(a, b):return math.gcd(a, b) == 1def find_e_and_d(fn):"""找到合适的e和d,使得e * d ≡ 1 (mod fn)"""for e in range(2, fn):if are_coprime(e, fn):d = pow(e, -1, fn)  # 使用扩展欧几里得算法计算e关于fn的模逆if d is not None:return e, dreturn None, Nonedef rsa_encrypt(m, e, n):"""使用RSA算法加密消息m"""return pow(m, e, n)def rsa_decrypt(c, d, n):"""使用RSA算法解密密文c"""return pow(c, d, n)# # 寻找大于10万的质数
primes_over_100000 = list(primerange(10000, 17000))
# 定义RSA算法的参数
p, q = primes_over_100000[-2:]n = p * q
fn = (p - 1) * (q - 1)# 找到合适的e和d
e, d = find_e_and_d(fn)# 选择一个较小的明文进行加密和解密
m_small = 256256256
c_small = rsa_encrypt(m_small, e, n)
m_decrypted_small = rsa_decrypt(c_small, d, n)
print(c_small,m_decrypted_small)

RSA加密算法是一种非对称加密算法,其安全性基于大数分解的困难性。下面是对RSA算法的理论解释:

  1. 质数选择

    • 选择两个大的质数 p p p q q q
  2. 计算模数

    • 计算 n = p × q n = p \times q n=p×q n n n 将是公钥和私钥的一部分。
  3. 计算欧拉函数

    • 计算 ϕ ( n ) = ( p − 1 ) × ( q − 1 ) \phi(n) = (p-1) \times (q-1) ϕ(n)=(p1)×(q1),其中 ϕ \phi ϕ 是欧拉函数,用于计算小于 n n n 且与 n n n 互质的正整数的个数。
  4. 选择公钥指数

    • 选择一个整数 e e e,使得 1 < e < ϕ ( n ) 1 < e < \phi(n) 1<e<ϕ(n) e e e ϕ ( n ) \phi(n) ϕ(n) 互质。这个 e e e 将是公钥的一部分。
  5. 计算私钥指数

    • 计算 e e e 关于 ϕ ( n ) \phi(n) ϕ(n) 的模逆 d d d,即找到一个 d d d 使得 e × d ≡ 1 ( m o d ϕ ( n ) ) e \times d \equiv 1 \pmod{\phi(n)} e×d1(modϕ(n))。这个 d d d 将是私钥的一部分。
  6. 加密过程

    • 对于明文 m m m m < n m < n m<n),计算密文 c c c c = m e m o d n c = m^e \mod n c=memodn
  7. 解密过程

    • 对于密文 c c c,计算明文 m m m m = c d m o d n m = c^d \mod n m=cdmodn

代码解释:

  • are_coprime(a, b): 检查两个数是否互质。
  • find_e_and_d(fn): 找到合适的 e e e d d d
  • rsa_encrypt(m, e, n): 使用RSA算法加密消息 m m m
  • rsa_decrypt(c, d, n): 使用RSA算法解密密文 c c c

运行结果:

在您的代码中,您选择了两个大质数 p p p q q q,然后计算了 n n n ϕ ( n ) \phi(n) ϕ(n),接着找到了合适的 e e e d d d。最后,您加密了一个小的明文 m small = 256256256 m_{\text{small}} = 256256256 msmall=256256256 并成功解密。

输出的 c_small 是加密后的密文,而 m_decrypted_small 应该与原始的 m_small 相同,验证了加密和解密过程的正确性。

在真实应用中,明文通常会通过某种方式(如填充)转换为小于 n n n 的数,并且RSA算法通常用于加密小块数据,如密钥交换,而不是直接加密大量数据。

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

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

相关文章

Flutter技术学习

以下内容更适用于 不拘泥于教程学习&#xff0c;而是从简单项目入手的初学者。 在开始第一个项目之前&#xff0c;我们先要了解 两个概念。 Widget 和 属性 Widget 是用户界面的基本构建块&#xff0c;可以是任何 UI 元素。属性 是 widget 类中定义的变量&#xff0c;用于配…

【IEEE独立出版 | 厦门大学主办】第四届人工智能、机器人和通信国际会议(ICAIRC 2024)

【IEEE独立出版 | 厦门大学主办】 第四届人工智能、机器人和通信国际会议&#xff08;ICAIRC 2024&#xff09; 2024 4th International Conference on Artificial Intelligence, Robotics, and Communication 2024年12月27-29日 | 中国厦门 >>往届均已成功见刊检索…

深入理解Transformer的笔记记录(精简版本)NNLM → Word2Vec

文章的整体介绍顺序为&#xff1a; NNLM → Word2Vec → Seq2Seq → Seq2Seq with Attention → Transformer → Elmo → GPT → BERT 自然语言处理相关任务中要将自然语言交给机器学习中的算法来处理&#xff0c;通常需要将语言数学化&#xff0c;因为计算机机器只认数学符号…

Node.js管理工具NVM

nvm&#xff08;Node Version Manager&#xff09;是一个用于管理多个 Node.js 版本的工具。以下是 nvm 的使用方法和一些常见命令&#xff1a; 一、安装 nvm 下载 nvm&#xff1a; 地址&#xff1a;https://github.com/coreybutler/nvm-windows/releases访问 nvm 的 GitHub 仓…

稳字诀! 洞见 强者的社交格局:从不恋战——早读(逆天打工人爬取热门微信文章解读)

都是文字 引言Python 代码第一篇 洞见 强者的社交格局&#xff1a;从不恋战第二篇 稳字诀结尾 引言 今天很奇怪 一直都挺烦造的 好像有很多事情忙 但是就是忙着找不定 不能定下心来 主要还是在股市 其他方面应该没啥 计划表还是不够给力 没办法把心在约定住 稳字诀 勤燃香,奋…

GPT和BERT

GPT和BERT都是基于Trm的应用&#xff0c;可以理解为GPT是decoder的应用&#xff0c;BERT可以说是encoder的应用 GPT 如图&#xff0c;就是GPT的原理&#xff0c;GPT是做生成式的任务的&#xff0c;没有办法进行下游任务改造&#xff0c;训练也是针对生成式的任务进行训练 BE…

​微信小程序 页面间传递数据

在小程序中&#xff0c;给页面传递参数通常有以下几种方法&#xff1a; 通过URL传递参数&#xff1a; 在小程序中&#xff0c;可以在页面的路径后面添加参数&#xff0c;然后在页面的 onLoad 函数中获取这些参数。 // 在app.json中配置页面路径 "pages": [{"pat…

Spring Boot 核心理解-profile

在 Spring Boot 中&#xff0c;application.properties 和 application.yml 是用来管理应用程序配置的主要文件。为了方便在不同的环境&#xff08;如 dev、test、prod&#xff09;下进行配置管理&#xff0c;Spring Boot 提供了 Profile 的概念&#xff0c;这使得我们可以针对…

使用DeepKE训练命名实体识别模型DEMO(官方DEMO)

使用DeepKE训练命名实体识别模型DEMO&#xff08;官方DEMO&#xff09; 说明&#xff1a; 首次发表日期&#xff1a;2024-10-10DeepKE资源&#xff1a; 文档&#xff1a; https://www.zjukg.org/DeepKE/网站&#xff1a; http://deepke.zjukg.cn/cnschema&#xff1a; http:/…

云开发 | 微信小程序云开发无法获取数据库数据

1.我在我的云数据库中创建了一个数据表&#xff08;即collection数据集&#xff09;userList,并且存入了两条用户信息数据 2. 想要通过按钮触发事件拿取数据库中数据并且打印在控制台时&#xff0c;获取数据失败&#xff0c;控制台无输出 3. 初始化 | 在开始使用数据库 API 进…

“医者仁术”再进化,AI让乳腺癌筛查迎难而上

世卫组织最新数据显示&#xff0c;我国肿瘤疾病仍然呈上升趋势&#xff0c;肿瘤防控形势依然比较严峻。尤其是像乳腺癌等发病率较高的疾病&#xff0c;早诊断和早治疗意义重大&#xff0c;能够有效降低病死率。 另一方面&#xff0c;中国地域广阔且发展不平衡&#xff0c;各地…

Qt-界面优化盒子模型(71)

目录 描述 相关属性 使用 描述 盒子模型 例如下面房子模型 • Content 矩形区域: 存放控件内容.⽐如包含的⽂本/图标等. • Border 矩形区域: 控件的边框. • Padding 矩形区域: 内边距. 边框和内容之间的距离. • Margin 矩形区域: 外边距. 边框到控件 geometry 返回的矩形…

Qt5.14.2 安装详细教程(图文版)

Qt 是一个跨平台的 C 应用程序开发框架&#xff0c;主要用于开发图形用户界面&#xff08;GUI&#xff09;程序&#xff0c;但也支持非 GUI 程序的开发。Qt 提供了丰富的功能库和工具&#xff0c;使开发者能够在不同平台上编写、编译和运行应用程序&#xff0c;而无需修改代码。…

sql server中字符串类型的日期如何比较大小

SQL Server 计算两个时间相差 案例&#xff1a;计算 标准结束时间 和 实际结束时间 之间的秒数差&#xff0c;并根据这个差值判断是否超时。 假设 test 表中有以下数据&#xff1a; 标准结束时间实际结束时间2024-10-12 10:00:002024-10-12 10:30:002024-10-12 11:00:00202…

【分布式微服务云原生】掌握Java分布式事务:2PC、3PC、TCC与Seata全解析

目录 掌握Java分布式事务&#xff1a;2PC、3PC、TCC与Seata全解析一、分布式事务的由来二、两阶段提交2PC1. **准备阶段&#xff08;投票阶段&#xff09;**2. **提交阶段**3.**优缺点**优点:缺点: 三、三阶段提交3PC1. 准备阶段&#xff08;Prepare Phase&#xff09;2. 预提交…

Flutter路由管理(二)

路由&#xff08;Route&#xff09;在移动开发中通常是指页面&#xff08;Page&#xff09;&#xff0c;这与Web开发的意义是相同的&#xff0c;Route在Andriod中通常指一个Activaty&#xff0c;在IOS中指一个ViewController&#xff0c;路由入栈&#xff08;push&#xff09;用…

原生小程序开发组件|地图组件汇总

map 基础库 2.0.12 开始支持, 低版本需做兼容处理。 依赖 MapKit 插件, 插件版本 > 2.2.2。 Tuya MiniApp Tools 上是通过 WebView 模拟的与真机存在差异&#xff0c;请以真机效果为主。 地图。相关 API&#xff1a;ty.createMapContext。这是基于异层渲染的原生组件, 请注意…

el-date-picker 自定义指令,输入数字自动转换显示yyyy-mm-dd格式

el-date-picker 自定义指令&#xff0c;输入数字显示yyyy-mm-dd格式 在main.js引入自定义指令direct.jsdirect.js公共部分时间日期控件&#xff0c;表格内编辑时间控件可用 - (年-月-日)时间范围控件 - (年-月-日)日期转换主要正则年-月-日/年-月-日 时:分/年-月-日 时:分:秒年…

Element-plus el-form、el-dialog 数据回显同时用时,重置失效问题

问题 当第一次打开网页并点击“编辑”按钮时&#xff0c;虽然对话框变量变为 true 使对话框可见&#xff0c;但同步代码会将 formData 对象的属性设置为默认值。由于 Vue 的异步更新机制&#xff0c;DOM 实际上还未更新&#xff0c;因此表单组件内绑定了这些有值的初始数据。这…

【病毒分析】DevicData家族扩散:全球企业和机构成为勒索病毒头号攻击目标!

1.背景 本文聚焦于勒索病毒家族 DevicData 的最新变种&#xff0c;命名为 .DevicData-P a2a9e9c勒索病毒。自2023年1月首次被发现以来&#xff0c;DevicData 家族一直对多个高价值目标展开攻击&#xff0c;包括企业用户、医疗机构和教育机构。这些目标通常持有大量敏感数据&a…