RSA_m大于n
题目:
n = 580642391898843192929563856870897799650883152718761762932292482252152591279871421569162037190419036435041797739880389529593674485555792234900969402019055601781662044515999210032698275981631376651117318677368742867687180140048715627160641771118040372573575479330830092989800730105573700557717146251860588802509310534792310748898504394966263819959963273509119791037525504422606634640173277598774814099540555569257179715908642917355365791447508751401889724095964924513196281345665480688029639999472649549163147599540142367575413885729653166517595719991872223011969856259344396899748662101941230745601719730556631637
e = 65537
c = 527385927230945492929315458115463552129093628297595665920198176569329921270918999171383286191860181516191777409946519948810538847208344492323224059725726880685926350273754932708416200806998063087309319627310723560196386121368314902355683822210051573155259512834771029132312521020164468624443192383131003812730666564749671200486863974248416544605066756499662606496984399999794805098660000068652321638910977721395965268328666203431233703708839422567743067345145110815004588320826555372031439862344253027028391890013483912121197813060228201401324061345691941964898600338941170388995752053648066070066229563535313683
解题思路:
- n可以分解得到非常多的素数
- 可能会想到欧拉函数求解,但是我们这么做了会发现解密出来是乱码
- 这时可能想到m>>n的这种可能,参考上一个差值分解素因数的方法
RSA密钥长度、明文长度和密文长度_rsa算法为什么要求m<n-CSDN博客
解答:
from Crypto.Util.number import *
import libnum
n = 580642391898843192929563856870897799650883152718761762932292482252152591279871421569162037190419036435041797739880389529593674485555792234900969402019055601781662044515999210032698275981631376651117318677368742867687180140048715627160641771118040372573575479330830092989800730105573700557717146251860588802509310534792310748898504394966263819959963273509119791037525504422606634640173277598774814099540555569257179715908642917355365791447508751401889724095964924513196281345665480688029639999472649549163147599540142367575413885729653166517595719991872223011969856259344396899748662101941230745601719730556631637
e = 65537
c = 527385927230945492929315458115463552129093628297595665920198176569329921270918999171383286191860181516191777409946519948810538847208344492323224059725726880685926350273754932708416200806998063087309319627310723560196386121368314902355683822210051573155259512834771029132312521020164468624443192383131003812730666564749671200486863974248416544605066756499662606496984399999794805098660000068652321638910977721395965268328666203431233703708839422567743067345145110815004588320826555372031439862344253027028391890013483912121197813060228201401324061345691941964898600338941170388995752053648066070066229563535313683
p = [
9282105380008121879, 9303850685953812323, 9389357739583927789, 10336650220878499841,
10638241655447339831, 11282698189561966721, 11328768673634243077, 11403460639036243901,
11473665579512371723, 11492065299277279799, 11530534813954192171, 11665347949879312361,
12132158321859677597, 12834461276877415051, 12955403765595949597, 12973972336777979701,
13099895578757581201, 13572286589428162097, 14100640260554622013, 14178869592193599187,
14278240802299816541, 14523070016044624039, 14963354250199553339, 15364597561881860737,
15669758663523555763, 15824122791679574573, 15998365463074268941, 16656402470578844539,
16898740504023346457, 17138336856793050757, 17174065872156629921, 17281246625998849649
]
phi = 1
for i in p:
phi *= (i - 1)
d = pow(e, -1, phi)
m1=pow(c,d,n)
print(m1)
#180737186816169506322127570988189068779224800839763475263419434406639988842620318322680683641437444818232882226865744992694392088182208759013165822086260825312525443377264568852639361619283601431727683114383200971782628268592849731146349713269718859867290866532142657938466867491162558308752805736349453019035570536747495964808804586435431842363794420143603383789885430085965899147114494146453298820313697512579867669086975579894190327462331056704445605747521809797565695324632116456034232919266719887812578826102693308613663064530856109851401828569252418517914045860461486723755128020450108186886435513134922394
for i in range(1000):
m=m1+i*n
flag=libnum.n2s(int(m))
if b"ZLCTF" in flag:
print(flag)
break
#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZLCTF{yafu_and_factordb_are_gooddddd!!!!Breach_RSA_By_factoring_n_hahahahahahahaha}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx