參考文章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
再次感謝淼淼兮與懷大佬