BUUCTF_RSA
首先,一向怕數學,畏難情緒嚴重的我之前意識到自己這個致命的缺點,所以下定決心,以后無論遇到多么難的問題,絕不能認慫,大不了多用點時間,一定不能怕,要勇敢,要能沉得住氣!
RSA原理解析與數學推導(前兩個已經get到了)
前置知識:
1.數論的基本概念:剩余系,縮系,費馬小定理,費馬-歐拉定理
2.RSA推導過程
3.判斷素數的方法
4.分解質因數的方法:Pollard算法
解題:
參考了大牛博客(很多CTF逆向題他都寫過博客,這里說一下,博客園感覺比CSDN好多了,可簡可麗)
1.打開pub.key文件(我的系統是Ubuntu,可以直接打開)
-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+
/AvKr1rzQczdAgMBAAE=
-----END PUBLIC KEY-----
發現公鑰,於是我就開始去了解相關知識,然后要知道從公鑰中獲取信息:
在這個優質解密網站中得到相關信息
key長度: 1024
模數(n): A1E4D93618B8B240530853E87738403851E15BBB77421F9B2377FB0B4F1C6FC235EAEC92EA25BB76AC221DCE90173A2E232FE1511909C76B15251D4059B288E709C1EF86BCF692757AAD736882DD1E98BEDFED9311A3C22C40657C9A52880BDC4B9E539041D44D52CB26AD13AB086F7DC294D144D6633A62EF91CA1775EB9A09
指數(e): 65537 (0x10001)
2.然后分解質因數:
p= 285960468890451637935629440372639283459
q=304008741604601924494328155975272418463
3.腳本:
import gmpy2
import rsa
e = 65537
n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
phin = (q-1)*(p-1)
d = gmpy2.invert(e, phin)
key = rsa.PrivateKey(n, e, int(d), p, q)
with open("pathof.enc", "rb+") as f: #pathofenc 是文件路徑
f = f.read()
print(rsa.decrypt(f, key))
附:
1.安裝安裝gmpy2(gmpy2的安裝很麻煩,不同人遇到的情況可能不同,特別是對一些內層原理不清楚的,只能按照教程,但很多教程不是都行,所以我們可以共同探討)
2.ftp文件傳輸的使用
3.使用OpenSSL加解密