蓝桥答疑的密码题
题目代码和相关数据
from Crypto.Util.number import getPrime
import libnum
flag = open("flag", "rb").read()
m = libnum.s2n(flag)
p = getPrime(1024)
q = getPrime(1024)
e = getPrime(16)
assert(e < 100000)
assert((p-1)*(q-1) % e != 0)
n = p*q
c = pow(m, e, n)
print(n)
print(c)
print(pow(203, e, n))
n1 = 14447643252565777715864027833246970457644149205377077114557844194475351427602891434717210425761489397720768080804057681716878329775755736867275787090842342972747341989307768894823500496996775613553387006129396991308248383534027124304458858418272142277374195546642817466972257010498548703719857037562126864875309726037978176322675043436578560167240153963108730741
n2 = 14065305138241653019388796033620985654344872570254349628087800523983030095068530755725116979263314303250478127056342308461281099856158859645844038934106881739232524756021030652006569887095508481889526525415268231172343427513042160771430081607295983468540271672389951882100887649557428947588071682994165813844808959646535650068447724168824415128560373107657807327
n3 = 14010873209740800300684312375935492061920876881342349004610469290657051121488882809366891041879534163378791500190062839533527507469631225716976954903025528349856859843788182713777319610094774588945463215323571510783491373934016807174204289914087857971209627878790468079321441437412922836789644662742241393729814010578667933096115511831275664646781666371100775831
print(pow(p, 3, n1))
print(pow(p, 3, n2))
print(pow(p, 3, n3))
9268365774880703391442727909575765427797075427451511529595496691163237049525133788965261716909405603845314783550122799589366982296802469163382370555818305282640258091443322302637596677934166554221101764915837609843260146565192516689400630889416102239771317014391907670780065078005197071222914754451153669022244069896636339261981139783224044474469686856105005842068010061834060619043866982130239845784980885446597457288485656817720389360622457941147295646045631025849063883110722217015655254582331888201457735202485530216190054977883059642108637163834310120937686480140674874547683513243469709006493746278572825903527
693332343170160519673454723171047887414505975503036113355778145914917873346915691272534953852966333737944390200425607168968652743930269614282060927729137503247045783993719753800493329194410182353122413742118531672166811765491984151380946564347831562918772440125408762187949870567504545707100336055688808987710499013778118610992351046714255619883612191260346561356558241413680106422736485715067182414121219009392029455080305055589612076035694920467703079913206953026763057115933540071906726871235161316367013001665727865458781748868434073571946280260683097988895302130357840906597822748291691210644430303613675959004
7406413397889594819729124655996446805274089058403997531172097174743789607749214262645845515849507186738393885455235301567067826056015531748179023283379262574076077687681132602668567800919308891406503891057505703870530996216846919029038937493423905841638283094795463952829946842095027698108329020862087760987798683786469717224736752276576938673519759410918963207097597232761533320116452660531623609181750754583340190542963682680193544820711164355151659298443161283771646518723239767335061327076063035999588657451372739274968126924948246784634501688827275520242392732098397952387682626075221441989977163646799969426210
655211559830901881626626097152306719128388521516334109253550160043521245799947987489054867663109075767866438236801643617557912404772535692717188057470530665117139416687814086766636662376218400418270178467997319355411551852208736360216757822331892808300290948859787819982434071094236295277637146803036093821085776769606587252732290644161131676572954739122419002
1451096827187308092257461798788497359980882370087563598858659005441513963642268986129505978813632720616618261110590225983328290346904340868481157589349368878751642636235746965976318718510025688796415356307603321615034271450401038655811551775889557904151912135588169928694505788955763846671906402014887087028162763288140509516671034677655593845343739634875020090
1853441923361033603685710754520080375544251354487044118329680038538917316465766359224867975816575527977067835928253352867273074229093539391809037301206592544335048449659879811356822310243071554170780989815049744260329758728335075075478479348582229733418740278581140054825946065894298935680443960089114313940919866616075895298102221191351496616365265412249738063
我直接吐槽,这个output实在是不走心,这什么玩意,直接堆叠在这。
题目分析
真的很简单,这里显示根据中国剩余定理,可以求出p,然后根据还需要爆破出e(本来看了下e的范围,大胆猜了一下65537,可以错了),之后正常RSA恢复
解题代码
求解p
import gmpy2
n1 = 14447643252565777715864027833246970457644149205377077114557844194475351427602891434717210425761489397720768080804057681716878329775755736867275787090842342972747341989307768894823500496996775613553387006129396991308248383534027124304458858418272142277374195546642817466972257010498548703719857037562126864875309726037978176322675043436578560167240153963108730741
n2 = 14065305138241653019388796033620985654344872570254349628087800523983030095068530755725116979263314303250478127056342308461281099856158859645844038934106881739232524756021030652006569887095508481889526525415268231172343427513042160771430081607295983468540271672389951882100887649557428947588071682994165813844808959646535650068447724168824415128560373107657807327
n3 = 14010873209740800300684312375935492061920876881342349004610469290657051121488882809366891041879534163378791500190062839533527507469631225716976954903025528349856859843788182713777319610094774588945463215323571510783491373934016807174204289914087857971209627878790468079321441437412922836789644662742241393729814010578667933096115511831275664646781666371100775831
c1 = 655211559830901881626626097152306719128388521516334109253550160043521245799947987489054867663109075767866438236801643617557912404772535692717188057470530665117139416687814086766636662376218400418270178467997319355411551852208736360216757822331892808300290948859787819982434071094236295277637146803036093821085776769606587252732290644161131676572954739122419002
c2 = 1451096827187308092257461798788497359980882370087563598858659005441513963642268986129505978813632720616618261110590225983328290346904340868481157589349368878751642636235746965976318718510025688796415356307603321615034271450401038655811551775889557904151912135588169928694505788955763846671906402014887087028162763288140509516671034677655593845343739634875020090
c3 = 1853441923361033603685710754520080375544251354487044118329680038538917316465766359224867975816575527977067835928253352867273074229093539391809037301206592544335048449659879811356822310243071554170780989815049744260329758728335075075478479348582229733418740278581140054825946065894298935680443960089114313940919866616075895298102221191351496616365265412249738063
p3=crt([n1,n2,n3],[c1,c2,c3])
p=gmpy2.iroot(p3,3)[0]
print(p)
#1092799128428019379995563450487816467343235749661476915235091829869773946425378521981214218233186188104097784564609298507215547744837386100986121818352123238526244907309948964424308378118595966320771254741457009499113836251698654158143826066393914060367346426685059751866977396672097116563431770222077399000038832959669317084817468255070156461284343470574643562449713351590558724203530605394417734887638477126094884909394540624370184403324616924941372469998245648795473520772586933863367839940302044660326191732513150833138473495096965058455925645243194462705024745605725285347442450888994911034298036375785694337535190801674044724477281741487514467725762745778788769936152888656014762891633108141885228375531122734025779933033190889835808460086112747176099070880035548472872355506321041869368560610116964277595737595286703797387405779760318531496942734464364903968773841660949336248016653243571184128332201237111944116651699
爆破出e
pe=7406413397889594819729124655996446805274089058403997531172097174743789607749214262645845515849507186738393885455235301567067826056015531748179023283379262574076077687681132602668567800919308891406503891057505703870530996216846919029038937493423905841638283094795463952829946842095027698108329020862087760987798683786469717224736752276576938673519759410918963207097597232761533320116452660531623609181750754583340190542963682680193544820711164355151659298443161283771646518723239767335061327076063035999588657451372739274968126924948246784634501688827275520242392732098397952387682626075221441989977163646799969426210
n=9268365774880703391442727909575765427797075427451511529595496691163237049525133788965261716909405603845314783550122799589366982296802469163382370555818305282640258091443322302637596677934166554221101764915837609843260146565192516689400630889416102239771317014391907670780065078005197071222914754451153669022244069896636339261981139783224044474469686856105005842068010061834060619043866982130239845784980885446597457288485656817720389360622457941147295646045631025849063883110722217015655254582331888201457735202485530216190054977883059642108637163834310120937686480140674874547683513243469709006493746278572825903527
for e in range(0,100000):
if(pow(203,e,n)==pe):
print(e)
break
#e=64033
正常恢复RSA
import gmpy2
import binascii
n=9268365774880703391442727909575765427797075427451511529595496691163237049525133788965261716909405603845314783550122799589366982296802469163382370555818305282640258091443322302637596677934166554221101764915837609843260146565192516689400630889416102239771317014391907670780065078005197071222914754451153669022244069896636339261981139783224044474469686856105005842068010061834060619043866982130239845784980885446597457288485656817720389360622457941147295646045631025849063883110722217015655254582331888201457735202485530216190054977883059642108637163834310120937686480140674874547683513243469709006493746278572825903527
c=693332343170160519673454723171047887414505975503036113355778145914917873346915691272534953852966333737944390200425607168968652743930269614282060927729137503247045783993719753800493329194410182353122413742118531672166811765491984151380946564347831562918772440125408762187949870567504545707100336055688808987710499013778118610992351046714255619883612191260346561356558241413680106422736485715067182414121219009392029455080305055589612076035694920467703079913206953026763057115933540071906726871235161316367013001665727865458781748868434073571946280260683097988895302130357840906597822748291691210644430303613675959004
e=64033
p=103002266215510928584177356427606909177093603224374566530717896920696403763807576980010536059975495286775723144547678374507631224862095595977195104058890039710258028328234786255617474388011733285861358980229658908247880901417419818658022286552141699605898461214412219170234643938007243405504840842735583093899
q=n//p
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
m=pow(c,d,n)
n1 = 14447643252565777715864027833246970457644149205377077114557844194475351427602891434717210425761489397720768080804057681716878329775755736867275787090842342972747341989307768894823500496996775613553387006129396991308248383534027124304458858418272142277374195546642817466972257010498548703719857037562126864875309726037978176322675043436578560167240153963108730741
print(p,3,n1)
print(binascii.unhexlify(hex(m)[2:]))
#b'flag{56e1c93d-1872-4151-ab2a-4a14509cd5d2}'