BUUCTF Reverse RSA
一天一道CTF,能多不能少
下載下傳檔案打開~
發現存在兩個檔案!!
不用說,flag.enc肯定是加密後的,就不用看了,直接看pub.key,内容如下:
-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+
/AvKr1rzQczdAgMBAAE=
-----END PUBLIC KEY-----
RSA的一個公鑰???貌似是的!
直接利用線上工具分解公鑰得到n和e:
ok得到了n,那就可以分解n得到p和q了~~
利用yafu這個工具進行分解,得到p,q:
得到pq就好辦了~
直接計算d,然後利用rsa子產品生成私鑰~
然後就可以直接對檔案進行解密了~
import hashlib
import gmpy2
import rsa
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
e = 65537
n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
d = gmpy2.invert(e,(q-1)*(p-1))
print(d)
d = 81176168860169991027846870170527607562179635470395365333547868786951080991441
key = rsa.PrivateKey(n,e,d,p,q)
print(key)
with open("output\\flag.enc","rb") as f:
print(rsa.decrypt(f.read(),key).decode())
得到:
flag:
flag{decrypt_256}
總結:
更深入的了解了RSA算法的奧秘~
同時也學會了yafu工具的使用,私鑰生成函數的使用
利用rsa子產品和gmpy2子產品對RSA進行解密~
過程雖有坎坷,但還是能夠跨越過去的!!!