RSA算法步骤
一、随机选择两个不相等的质数p和q。
二、计算p和q的乘积n。//n写成二进制既是密钥的长度
三、计算n的欧拉函数φ(n)
四、随机选择一个整数e,满足1< e < φ(n),且e与φ(n) 互质
五、计算e对于φ(n)的模反元素d **
六、将n和e封装成公钥,n和d封装成私钥
模反元素定义:有一个整数d,可以使得φ(n) mod (e*d) =1
欧拉函数定义:在数论中,对于正整数N,少于或等于N ([1,N]),且与N互质的正整数(包括1)的个数,记作φ(n)
欧拉公式 φ(n) = (p-1)*(q-1)***
例:给一个正整数n=10,小于10且与10互质的数有1,3,7,9,立即推→φ(n)=4
针对课上出的一个题,附上Python代码如下
import gmpy2
from Crypto.Util import number
p=301861363239887807384224177140591715807
q=315831234595666139083891245404044827641
e=65537
c=81863336247304443560424629413097253456392970574415344763122999669386681166515
n=p*q
t=(p-1)*(q-1)
d=gmpy2.invert(e,t)
m=pow(c,d,n)
print(number.long_to_bytes(m))
由于我用的python3.7中,没有自带gmpy2库和Crypto库,这里自行安装这两种库
1.Crypto
在cmd中运行
pip install pycryptodome
安装成功以后进入python/lib/site-packages
将crypto文件夹重命名为Crypto(首字母大写)
即可使用
2.gmpy2
首先要安装gmpy2的前提文件wheel
pip install wheel
安装完成后再安装gmpy2
gmpy2安装网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
#wheel 文件包需要和你所安装的 python3 版本一致
安装完成之后进入cmd安装gmpy2
pip install D:/gmpy2-2.0.8-cp37-cp37m-win_amd64.whl
安装完成之后即可正常使用
解出flag