非对称算法之RSA

二进制诗人
• 阅读 2389

找到一个正向容易,逆向很难的公式

$$ m^{x} \equiv y\pmod n$$

设$m$,$n$都是已知的正整数,在知道$x$的情况下计算$y$容易,而只有$y$推算$x$很难

这里得介绍一个公式
phi function 记作 φ

φ(n) $ 求 1~n 中与 n互素的数的个数

如 φ(8) 在1,2,3,4,5,6,7中,1,3,5,7与8互素,所以 φ(8)= 4

考虑 n为质数,则 φ(n) = n -1

因为
$$ \phi(A*B) = \phi(A) * \phi(B) $$

若 N = P1 * P2 (质因数分解)
所以 $$ \phi(N) = (P1-1) * (P2-1) $$

因为m与n互素, 有以下公式
$$ m^{\phi(n)} \equiv 1 \pmod n $$

结合起来可以得到

$$ m^{k*φ(n)+1} \equiv m \pmod n $$

私钥可以写成

$$ e*d = k*φ(n)+1 $$
$$ d = \frac {k*φ(n)+1} {e} $$

举例
m = 89
p1 = 53
p2 = 59
n= 53*59 = 3127
φ(n) = 52*58 = 3016
e = 3 (必须为奇数,且不与φ(n)具体公因数)
私钥
$$ d = \frac {k*\phi(n)+1} e = \frac {2*3016+1} 3 = 2011 $$

只公开n和e
n = 3127
e = 3

加密过程

m的e次方 mod n 生成密文 c
$$ c = 89^3 mod 3127 = 1394 $$

解密过程

$$ c ^d \mod n = 1394^{2011} \mod 3127 = 89 $$

破解
因为只暴露 c, n ,要得到d的话,就得解出 k*φ(n)+1,也就是φ(n),这个就回到最前面的公式,很难。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
4年前
人工智能数学基础2:指数、方根及对数运算公式
本节主要介绍指数、方根及对数运算公式,这些公式都是基本的公式,但使用得比较多。一、指数公式二、方根运算在a、b大于0的情况下:三、对数运算2.1、对数的定义如果ba的n次方,即a的n次方等于b(a0且a不等于1),那么数n就叫做以a为底的b的对数,记作:其中,a叫做对数的底数,b叫做真数,n叫做以a为底b的对数。由此可见,在某种情况下(底数大于0,
DaLongggggg DaLongggggg
4年前
python刷题-最大最小公倍数
问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式输入一个正整数N。输出格式输出一个整数,表示你找到的最小公倍数。样例输入9样例输出504数据规模与约定1<N<106。Nint(input())Min1ifN<2:print(N)elifN%2
Patrick Patrick
4年前
【分治法】解决中位数问题、格雷码问题以及分治法直接折半存在的问题讨论————武汉理工大学算法分析实验1
AlgorithmExperiment算法分析课实验分治法的核心思想是将问题分为若干子问题去,使规模一步步缩小,最终分到一步就能得出结果。要注意每个子问题需要性质相同而且相互不重复。采用分治法完成如下任务:i.中位数问题问题描述设X0:n1和Y0:n–1为两个数组,每个数组中含有n个已排好序的数。找出X和Y
Karen110 Karen110
4年前
人工智能数学基础-线性代数4:矩阵及矩阵运算
一、矩阵定义矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,定义如下:由m×n个数aij排成的m行n列的数表称为m行n列的矩阵,简称m×n矩阵。记作:这m×n个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数aij为(i,j)元的矩阵可记为(aij)或(aij)m×n,m×
Stella981 Stella981
3年前
Openssl生成RSA公私钥以及将公钥转换成C#支持的格式
Openssl生成RSA公私钥以及将公钥转换成C支持的格式1.RSA算法介绍RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。RSA的算法涉及三个参数,n、e、d。其中,n是两个大质数p、q的积,n被称为模数,n的二进
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
3年前
LeetCode 5561. 获取生成数组中的最大值
文章目录1\.题目2\.解题1\.题目给你一个整数n。按下述规则生成一个长度为n1的数组nums:nums00nums11当2<2i<n时,nums2inumsi
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(