RSA加密原理

2024.2.23

密钥对的生成过程

1、随机找两个质数 P Q ,P Q 越大,越安全

本例取 P = 67 ,Q = 71

计算他们的乘积 N = P * Q = 4757

转化为二进为 1001010010101,该加密算法即为 13 位,实际使用中的算法是往往是 1024 位 或 2048 位,位数越长,算法越难被破解

2、计算 N 的欧拉函数 φ(N)  

(注:互质是公约数只有1的两个整数,叫做互质整数)

φ(N) 表示在小于等于 N 的正整数之中,与 N 构成互质关系的数的个数

例如:在 1 8 之中,与 8 形成互质关系的是 1357,所以 φ(n) = 4

如果 N = P * QP Q 均为质数,则
φ(N) = φ(P * Q)= φ(P - 1)φ(Q - 1) = (P - 1)(Q - 1)

本例中 φ(n) = 66 * 70 = 4620,这里记为 TT = φ(N) = 4620 

3、求公钥 E

E的范围:{E | gcd(E,T)=1, 1<E<T } 

讲人话就是 E , T 互质并且 E 大于 1 小于 T

本例取E=17(随便取,不要和T太接近了)

4、求私钥 D

D的范围:{D | E*D%T=1, 1<D<T } 

讲人话就是 E 和 D 的乘积除以 T 的余数等于 1 并且 D 大于 1 小于 T

本例取D=193

5、至此密钥对的生成就完成了

公钥(n,e)=(3403,17)    私钥(n,d)=(3403,193)

 6、加解密过程

加密(假设明文为123

明文^E % N = 123^17 % 3403 = 943

       ↑这里是幂运算,别理解成异或运算了

解密(现在密文就为943

密文^D % N = 943^193 % 3403 = 123

以上文字用 python 的话来讲就是

#先取两个随机的质数
P = int(input("请输入一个质数P:"))
Q = int(input("请输入一个质数Q:"))
N = P*Q#通过欧拉函数计算与N互质的个数
T = (P-1)*(Q-1)#取公钥
#找质数,埃拉托斯特尼筛法
primes = [True] * (T + 1)
for p in range(2, int(T**0.5) + 1):if primes[p]:primes[p*p::p] = [False] * ((T - p*p) // p + 1)
print([p for p in range(2, T + 1) if primes[p]])
E = int(input("请从上面数中选一个作为公钥E:"))#取私钥
print([i for i in range(2,T) if i*E%T==1])
D = int(input("请从上面数中选一个作为私钥D:"))#公钥(N,D) 私钥(N,E)
print(f"公钥({N},{E}) 私钥({N},{D})")#这里演示一下明密文的转化(仅数字)
plaintext = int(input("请输入明文"))
ciphertext = plaintext**E%N
plaintext = ciphertext**D%N 
print(f"密文为:{ciphertext}")
print(f"明文为:{plaintext}")

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

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

相关文章

前瞻性规划:解决数据中心机房通用性问题

随着技术的快速发展&#xff0c;数据中心机房的建设面临着不断变化的挑战。在机房规划和设计阶段&#xff0c;缺乏对用户需求的深入分析和对未来发展趋势的考量&#xff0c;往往会导致机房通用性不足&#xff0c;从而影响其长期使用效率和稳定性。本文将探讨数据中心机房建设中…

Ansible概述和常用模块

目录 一、ansible概述 &#xff08;一&#xff09;基础知识 &#xff08;二&#xff09;特性 二、部署ansible &#xff08;一&#xff09;管理端安装 &#xff08;二&#xff09;ansible 目录结构 &#xff08;三&#xff09;配置主机清单 &#xff08;四&#xff09;…

Leetcode2583. 二叉树中的第 K 大层和

Every day a Leetcode 题目来源&#xff1a;2583. 二叉树中的第 K 大层和 解法1&#xff1a;层序遍历 排序 先使用层序遍历计算出树的每一层的节点值的和&#xff0c;保存在数组 levelSum 中。然后将数组进行排序&#xff0c;返回第 k 大的值。需要考虑数组长度小于 k 的边…

【Linux】 yum命令使用

yum命令 yum&#xff08; Yellow dog Updater, Modified&#xff09; 是一个在 Fedora、CentOS 及其它一些基于 RPM 的 Linux 发行版中使用的包管理器。它允许用户自动安装、更新、配置和删除软件包。yum 由 Python 写成&#xff0c;基于 RPM&#xff08;Red Hat Package Mana…

EasyRecovery2024永久免费版手机数据恢复软件功能全面介绍

一、功能概述 EasyRecovery手机数据恢复软件是一款专为移动设备设计的数据恢复工具。它能够有效地从智能手机、平板电脑等移动设备中恢复因各种原因丢失的数据&#xff0c;包括但不限于误删除、格式化、系统崩溃、病毒感染等。 EasyRecovery-mac最新版本下载:https://wm.maked…

【Java程序设计】【C00267】基于Springboot的在线考试系统(有论文)

基于Springboot的在线考试系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 本系统是基于Springboot的在线考试系统&#xff1b;本系统主要分为管理员、教师和学生三种角色&#xff1b; 管理员登录系统后&#xff0c;可以对首页&#x…

悄悄话花费的时间(C语言)【二叉树各结点统计求和】

题目描述 给定一个二叉树&#xff0c;每个节点上站着一个人&#xff0c;节点数字表示父节点到该节点传递悄悄话需要花费的时间。 初始时&#xff0c;根节点所在位置的人有一个悄悄话想要传递给其他人&#xff0c;求二叉树所有节点上的人都接收到悄悄话花费的时间。 输入描述 …

前端数据可视化:ECharts使用

可视化介绍 ​  ​  应对现在数据可视化的趋势&#xff0c;越来越多企业需要在很多场景(营销数据&#xff0c;生产数据&#xff0c;用户数据)下使用&#xff0c;可视化图表来展示体现数据&#xff0c;让数据更加直观&#xff0c;数据特点更加突出。   ​  数据可视化主要目…

openssl 生成nginx自签名的证书

1、命令介绍 openssl req命令主要的功能有&#xff0c;生成证书请求文件&#xff0c; 查看验证证书请求文件&#xff0c;还有就是生成自签名证书。 主要参数 主要命令选项&#xff1a; -new :说明生成证书请求文件 -x509 :说明生成自签名证书 -key :指定已…

【大数据】Flink 内存管理(一):设置 Flink 进程内存

Flink 内存管理&#xff08;一&#xff09;&#xff1a;设置 Flink 进程内存 1.配置 Total Memory2.JVM 参数3.根据比例限制的组件&#xff08;Capped Fractionated Components&#xff09; Apache Flink 通过严格控制各种组件的内存使用&#xff0c;在 JVM 上提供高效的工作负…

全面解析企业财务报表系列之四:财务报表的真实性和可靠性

全面解析企业财务报表系列之四&#xff1a;财务报表的真实性和可靠性 一、什么是会计方法二、选择会计方法三、会计方法的重要性四、会计报表常用的造假手段五、财务报表经常被遗漏的重要事件六、财务报告造假的资信敏感性七、财务报告审计的重要性八、审计报告 一、什么是会计…

微信小程序商城-兜点零食

微信小程序商城 【微信小程序商城-兜点零食】 小程序采用uniappvue开发&#xff0c;后台djangopython开发&#xff0c;模块化方便二次开发 1、具备商城完整功能&#xff0c;包括在线下单、支付、订单跟踪、物流查询&#xff1b; 2、具备社交化分享功能&#xff0c;为用户提供分…

2024年数学建模美赛详细总结以及经验分享

前言&#xff1a; 本文记录与二零二四年二月六日&#xff0c;正好今天是数学建模结束&#xff0c;打算写篇文章记录一下整个过程&#xff0c;以及一些感受、还有经验分享。记录这个过程的原因就是我在赛前&#xff0c;在博客上找了很久&#xff0c;也没有像我这么类似记…

基于事件触发机制的孤岛微电网二次电压与频率协同控制MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 本模型质量非常高&#xff0c;运行效果完美。本模型为4机并联孤岛系统&#xff0c;在下垂控制的基础上加入二次控制&#xff0c;二次电压与频率协同控制策略利用事件触发的方法来减少控制器的更新次数。该方法…

easyui 手风琴Accordion 面板的高度设置

今天接到一个新的小需求&#xff0c;如下图&#xff0c;当预算表单只有一个时&#xff0c;要求不显示预算表单这块的内容。 考虑到页面创建时用到了表单的回调和点击方法&#xff0c;所以不能单纯的移除&#xff0c;移除右侧表格的创建会报错&#xff0c;所以只能隐藏。 隐藏…

Docusaurus框架——快速搭建markdown文档站点介绍sora

文章目录 ⭐前言⭐初始化项目&#x1f496; 创建项目&#xff08;react-js&#xff09;&#x1f496; 运行项目&#x1f496; 目录文件&#x1f496; 创建一个jsx页面&#x1f496; 创建一个md文档&#x1f496; 创建一个介绍sora的文档 ⭐总结⭐结束 ⭐前言 大家好&#xff0…

劫持已经存在的DLL

这里找到一个成功加载的 这里先把原来程序正常的dll改名为libEGL1.dll&#xff0c;然后将我们自己的dll改名为libEGL.dll 然后再重新执行程序&#xff0c;这里同样是弹出了窗口

QEMU源码全解析 —— virtio(20)

接前一篇文章&#xff1a; 上回书重点解析了virtio_pci_modern_probe函数。再来回顾一下其中相关的数据结构&#xff1a; struct virtio_pci_device struct virtio_pci_device的定义在Linux内核源码/drivers/virtio/virtio_pci_common.h中&#xff0c;如下&#xff1a; /* O…

centos7 docker 安装

1.卸载之前docker环境 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docke…

Sora-OpenAI 的 Text-to-Video 模型:制作逼真的 60s 视频片段

OpenAI 推出的人工智能功能曾经只存在于科幻小说中。 2022年&#xff0c;Openai 发布了 ChatGPT&#xff0c;展示了先进的语言模型如何实现自然对话。 随后&#xff0c;DALL-E 问世&#xff0c;它利用文字提示生成令人惊叹的合成图像。 现在&#xff0c;他们又推出了 Text-t…