天天看點

BUUCTF Reverse RSA

BUUCTF Reverse RSA

一天一道CTF,能多不能少

下載下傳檔案打開~

發現存在兩個檔案!!

BUUCTF Reverse RSA

不用說,flag.enc肯定是加密後的,就不用看了,直接看pub.key,内容如下:

-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+
/AvKr1rzQczdAgMBAAE=
-----END PUBLIC KEY-----
           

RSA的一個公鑰???貌似是的!

直接利用線上工具分解公鑰得到n和e:

BUUCTF Reverse RSA

ok得到了n,那就可以分解n得到p和q了~~

利用yafu這個工具進行分解,得到p,q:

BUUCTF Reverse RSA

得到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())
           

得到:

BUUCTF Reverse RSA

flag:

flag{decrypt_256}

總結:

更深入的了解了RSA算法的奧秘~

同時也學會了yafu工具的使用,私鑰生成函數的使用

利用rsa子產品和gmpy2子產品對RSA進行解密~

過程雖有坎坷,但還是能夠跨越過去的!!!