公钥密码学RSA入门

RSA算法的具体描述如下:

  1. 任意选取两个不同的大素数p和q,n=pq,根据欧拉函数(小于n且与n互素的正整数的个数)得:φ(n)=φ(pq)=φ(p)φ(q)=(p-1)(q-1)
  2. 任意取一个大整数e,满足gcd(e,φ(n))=1,整数e用作密钥
  3. 确定解密钥d,满足(de)modφ(n)=1,即de=kφ(n)+1,k≥1是一个任意的整数。所以,若知道e和φ(n),很容易计算出d
  4. 公开整数n和e,秘密保存d
  5. 将明文m(m<n是一个整数)加密成密文c,加密算法为:c=E(m)=memodn
  6. 将密文c解密成明文m,解密算法为:m=D(c)=cdmodn

然而,只根据n和e(注意:不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户才可对密文解密。

 

 

例题:攻防世界_easy_rsa

根据如上原理,写了以下脚本:

import gmpy2
p = 473398607161
q = 4511491
e = 17
N = (p-1)*(q-1)
k = 1
while 1:
de = k*N+1
if de%e==0:
print(de//e)
break
else:
k+=1
continue

后来知可以用gmpy2库中的函数invert(),直接求,代码如下:

 

import gmpy2
p = 473398607161
q = 4511491
e = 17
N = (p-1)*(q-1)
d = gmpy2.invert(e,N)
print(d)

 

posted @   Athena-ydy  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示