RSA理解版本2

RSA原理理解

起源:

RSA是一种公钥密码算法,它的名字是由它的三位开发者,即Ron Rivest、Adi Shamir 和 Leonard Adleman 的姓氏的首字母组成的。

简介:

RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到了一种快速因数分解的算法,那么用RSA加密的信息的可靠性就会极度下降。但找到这样算法的可能性是非常小的。今天只有短的RSA钥匙才可能被暴力方式破解。到目前为止(2021年),世界上还没有任何可靠的攻击RSA算法的方式。只要其密钥的长度足够长,用RSA加密的信息实际上是不可能被破解的。

加密过程

加密由公钥,私钥,明文,密文,四部分组成。

0b324b7167bc22d72d748dbd2b553c3

前提:公钥(7,33)和私钥(3,33)中的,7,33(这两个33是同一个数字)只有私钥中的3是不公开的。

过程1:现在假设我们用这个公私钥对去发送消息C A O,假如字符转换为的十进制数字的规则就是序号顺序,那么C A O 对应的就是3 1 15

过程2:这时候就用到了公钥中的第一个数字7,也就是对3进行7次方,1进行7次方,15进行7次方,结果分别是2187 1 170859375

过程3:使用公钥的第二个数字33,对上面数字进行求余。2187%33=9 1%33=1 170859375%33=27 最后得到的9 1 27就是密文

将得到的密文发送给接收方,接收方再进行解密

解密过程

1.由发送方可以得到9 1 27,依次对其进行3次方,这里的3次方的3就是私钥中的3.分别得到 729 1 19683

2.再对上面求得数字进行求余 729%33=3 1%33=1 19683%33=15 这里的33就是公钥和私钥公开的数字

3.上一步求解得到的3 1 15是不是很眼熟,没错就是要发送的信息,也就是明文

那么可以用公钥加密,私钥解密,那也可以用私钥解密,公钥加密

总结

如果用E代表7 ,N代表33 D代表3,那么

公钥:(E,N)私钥:(D,N)

得到密文(也就是加密)的公式: 密文=明文的E次方%N

解出明文的公式: 明文=密文的D次方%N

那么公钥和私钥该如何确定?

971580dece8f8f1c18371e223faa740

五个步骤: 1.任意选择两个质数 2.两个质数相乘 3.计算欧拉函数 4.选公钥e的时候,要求不是t的因子还必须是大于1小于T,那么就是gcd(e,T)=1(即是e和T的最大公因数是1)

5.计算私钥d--逆元

逆元---逆元是什么?为什么突然讨论逆元?

还记得上面求解私钥指数d的公式吗?

e*d mod T=1

这个公式也可以写成

e*d ≡ 1(mod T)

定义:如果一个线性同余方程 ax ≡ 1(mod b),则 x 称为 a mod b 的逆元,记作a-1 (a的-1次方)。一个数有逆元的充分必要条件是gcd(a,b)=1,此是逆元唯一存在 。

此处为什么讨论逆元呢?其一,RSA中有逆元的概念;其二,中国剩余定理(CRT)可与 RSA 算法结合来进行加解密,CRT又逃不开逆元的概念,所以就说了。逆元也是数论中一个十分重要的概念,当我们要求 (a / b) mod p的值,且a很大,大到会溢出;或者说b很大,达到会爆精度。无法直接求得a/b的值时,我们就要用到乘法逆元。

所以上述求解私钥指数d,可以说 e 的逆元是 d mod T

计算方法 inverse--- gmpy2.invert

注意求d在python中可以使用求逆函数inverse

#给出p和q,e的数值.引用求逆函数inverse
from Crypto.Util.number import inverse
p=473398607161
q=4511491
e=17
#计算欧拉函数T
t=(p-1)*(q-1)
#计算d
d=inverse(e,t)
print(d)

这个库实在python3.12下执行的,其他版本的可能需要将下载的Crypto的包改为大写

image-20240423145314064

#给出p和q,e的数值.引用求逆函数gmpy2
import gmpy2
p=473398607161
q=4511491
e=17
\#计算欧拉函数T
t=(p-1)*(q-1)
\#计算d
d=gmpy2.invert(e,t)
print(d)

使用gmpy2这个库的时候,我们使用的是3.10的python,其他版本可能会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值