参考文章http://www.freebuf.com/articles/rookie/154183.html
一直以来rsa出现在ctf中概率很大,无论是线上赛还是线下赛
找了很多rsa的博客看的都是一知半解,谁让数学水平差呢。。。。。
大概原理是,明文为M 密文为C 公钥(n/e)私钥(n/d),n是两个大素数的乘积,可以表示为p×q,而e*d=(p-1)(q-1) //反正我是这么理解的,当然细节肯定不是这么简单,原作者做了详细的解释
明文M=C^d mod n
密文C=M^e mod n
解题的时候要用到gmpy2模块,具体的用法解释也没找到。。。。。。
这里有实验吧的题目 http://www.shiyanbar.com/ctf/1828
p, q, e = gmpy2.mpz(473398607161), gmpy2.mpz(4511491), gmpy2.mpz(17)
phi_n = (p - 1) * (q - 1)
d = gmpy2.invert(e, phi_n)
print(d)
gmpy2.mpz()为初始化,gmpy2.invert()我的理解是逆向求d,相当于x=phi_n/e,如果不用这个方法的话对于x是不是只能枚举数字试呢。。。。。
# 计算并输出c^d mod n,也就是求明文m=pow(c, d, n),密文同理
对于求解p和q,大素数分解是困难的,作者解释了yafu工具的用法,原文的云盘分享失效,可以从这里下载
https://sourceforge.net/projects/yafu/
云盘分享(备份)链接: https://pan.baidu.com/s/1a_h38_i7rCMcf62SN6meJA 密码: qjgn
再次感谢淼淼兮与怀大佬