RSA 是 CTF 裡 最經典的密碼學演算法 之一,幾乎每場比賽都會有相關題目。
它是一種非對稱加密,與對稱加密(像 Caesar、Vigenère)不同。
👉 這樣就能實現安全的通訊。
加密:c ≡ m^e(mod n)
解密:m ≡ c^d(mod n)
其中:
使用 pycryptodome 套件:
from Crypto.Util.number import getPrime, bytes_to_long, long_to_bytes
from Crypto.PublicKey import RSA
c = <given_c>
n = <given_n>
e = <given_e>
p = ?
q = ?
#透過 https://factordb.com/ 或其他方法解出p跟q
phin = (p-1)*(q-1)
d = pow(e,-1,phin)
m = pow(c,d,n)
msg = hex(m)
msg = msg[2:]
msg = bytes.fromhex(msg)
print(msg)
好複雜,來看看題目吧
這題進行nc連線後會得到三個參數:N、e、c
我們可以去 https://factordb.com/ 拆解N
得到p為2,q則為N/2
寫進我們上面的範例程式中
好欸獲得flag了~
以上就是一些簡單的RSA知識!,明天會講有關雜湊函式的內容
想看更多,歡迎明天再來ㄛ~