原題:
RSA BEGINNER
90?points
182?solves
Cryptography
Hard
I found this scribbled on a piece of paper. Can you make sense of it? https://mega.nz/#!zD4wDYiC!iLB3pMJElgWZy6Bv97FF8SJz1KEk9lWsgBSw62mtxQg
下載了鏈接中的文件默色,如下:
e: 3
c:219878849218803628752496734037301843801487889344508611639028
n:245841236512478852752909734912575581815967630033049838269083
很明顯抢腐,e是公鑰指數(shù)胧华,c是密文垛贤,n是大數(shù)
首先我嘗試了用lowe的方法妖混,將密文用3開方,如果不行加上n再開方。但是嘗試了加上很多的n都沒有開方成整數(shù)豆拨。
又看到n的數(shù)值不大直奋,應該可以找到n的兩個素數(shù)因子p和q能庆。利用因式分解數(shù)據(jù)庫http://factordb.com,發(fā)現(xiàn)n可以分解成兩個素數(shù)脚线。知道了兩個素數(shù)后我們就可以很快地通過公鑰e來得到私鑰了搁胆。
python代碼如下:
import gmpy2
e=gmpy2.mpz(3)
c=gmpy2.mpz(219878849218803628752496734037301843801487889344508611639028)
n=gmpy2.mpz(245841236512478852752909734912575581815967630033049838269083)
# 因式分解得到的p和q
p=gmpy2.mpz(590872612825179551336102196593)
q=gmpy2.mpz(416064700201658306196320137931)
phi=gmpy2.mul(p-1,q-1)#計算(p-1)*(q-1)得到phi
d=gmpy2.invert(e,phi)#計算e對于phi的摩反
m=int(gmpy2.powmod(c,d,n))#c的d次方mod n
mt=bytes.fromhex(hex(m)[2:])#將int轉(zhuǎn)換成byte
print(mt)
得到結果:
b'abctf{rs4_is_aw3s0m3}'