RSA密码的基本知识:
RSA密码常见的参数有:
p、q、e(公钥部分)、d(私钥部分)、n(n=p*q)、m(明文)、c(密文)
基本运算公式:
明文加密:
密文解密:
求d公式:
表现形式1:
其中k为任意整数
表现形式2:
表现形式3:
补充:这两个公式只是表现形式不一样,实质上是一样的。
公钥和密钥:
公钥:(e,n)
密钥:(d,n)
补充:部分题目可能会有dp、dq。其中dp=d%(p-1),dq=d%(q-1)
RSA密码在CTF的crypto题的基础exp应用(python):
虽然我们知道RSA密码的参数该怎么计算,但是当所给参数过大的时候计算量会非常大,口算、手算肯定是不现实的,这时候就要用python编写exp来计算参数,而全使用基本python语法的exp效率过于低下,在此我总结一下exp里的关键操作。
求d:
已知求d公式如上,比如e*d=1(mod n),我们可以利用python的gmpy2版块所拥有的invert函数来计算d,如下:
from gmpy2 import*
d=gmpy2.invert(e,(p-1)*(q-1)) #invert函数的作用是求出乘并取余(p-1)*(q-1)为1的某一整数
gmpy2的安装方法:
输入以下命令(确保pip3已安装)
sudo pip3 install gmpy2
求明文m或求密文c:
求明文m和求密文c可以用python的pow函数,如下:
c=pow(m,e,n)
m=pow(c,d,n)
#pow函数返回的是c的d次幂取余n的值