week6

1.rsa1

题目:

import gmpy2

from Crypto.Util.number import *

from secret import flag

def pad(p):

    return p + (p >> 1000)

p=getPrime(2048)

q=gmpy2.next_prime(pad(p))  

e=65537

n=p*q

m=bytes_to_long(flag)

c=pow(m,e,n)

print("n=",n)

print("c=",c)

n= 347764940170003137961772505241110388640112572270645427588267148645112624731695474255550586288757454536102592410933959826891119173970192117585792333482670793486123390231932447895024001228194939347178407990860958372412889217193411831132846900548956396907492735908500223743624459068750349961369208226172579711337167451868677564492105319198118825871693736621581536793627274241440670158920952445790459569690812466828019005661260109159172025708864029288176428419110045336878460734742439516864459222429636435812946580199951353897989822555658721480912684432380478639951416316262773652479984778459338616660174482519657378633621921718706260095849702728614101507938569585381880110002403393750173938648769926241562398713176502716839634134324904450000558235614252372882210699227643978015760881127090393646764640849086578103467377096165204222946910242727625934550903220665062351754101316781410110447612133456698959855330037018417466124273266891424917224748138616675180641594122528531932846499617500724144165080563593043211449997562341885418405200106360386729363252824464839940986169084707636581115905643590367676449563513670094012228113333223931460570715014035601180388848466859345212692796246114394108135919266513255894197734817244953969785209487

c= 154550349423579437662296688626911127311921838479810979399916576131372439126705747623674575116347966998261540280160651374085300629231965710181891919063428936316046358986890131896354344112087758667638912235505551890573663594081111747239505517072159972422447741016849425436479421550706163019801541340129973636103559160979476616477346087321793493610327168813753246371276741517043132260223821491841146245345574053705768425640967520901958903818938763582431578456230704123222738245057143061415267131700352443491866442999075561835131847588699286213386070644200163500510739627252459287990417367944647121272440817815556900606585448029768014595673432426307740330472602898838455242620811831656031936032319412225140490139118788352647528486278561404226894927696147343557131025403623909262496919705318530904485672186931223461433533661914234849879831610614022203540171407247294834080568233632201584738051729160723191297967044401662575226081189955895572187848526549212528704504032466392718464031245794892286824933147331385560968260462507840461040577699484859572992583536016957838365989584803705244141236824650032693882622111810486795311124941174647877601799592637182036500914064001725895249240560213306161682650860904636786346712298248258838711503464

wp:这题的难度就在于分析q,q是p转为二进制后向右移1000位的数加上p的下一个质数,这时我们不妨将1000换成1来进行思考,p=2,则q=5 n=10,n+n>>1=15,p=3,q=5,n=15,n+n>>1=22,此时发现n+n>>1开根之后的下一个质数即为q,则我们得到q的表达式,即

q=nextprime(iroot(n),2)[0])

分析完毕,可以跑脚本了

n= 347764940170003137961772505241110388640112572270645427588267148645112624731695474255550586288757454536102592410933959826891119173970192117585792333482670793486123390231932447895024001228194939347178407990860958372412889217193411831132846900548956396907492735908500223743624459068750349961369208226172579711337167451868677564492105319198118825871693736621581536793627274241440670158920952445790459569690812466828019005661260109159172025708864029288176428419110045336878460734742439516864459222429636435812946580199951353897989822555658721480912684432380478639951416316262773652479984778459338616660174482519657378633621921718706260095849702728614101507938569585381880110002403393750173938648769926241562398713176502716839634134324904450000558235614252372882210699227643978015760881127090393646764640849086578103467377096165204222946910242727625934550903220665062351754101316781410110447612133456698959855330037018417466124273266891424917224748138616675180641594122528531932846499617500724144165080563593043211449997562341885418405200106360386729363252824464839940986169084707636581115905643590367676449563513670094012228113333223931460570715014035601180388848466859345212692796246114394108135919266513255894197734817244953969785209487

c= 154550349423579437662296688626911127311921838479810979399916576131372439126705747623674575116347966998261540280160651374085300629231965710181891919063428936316046358986890131896354344112087758667638912235505551890573663594081111747239505517072159972422447741016849425436479421550706163019801541340129973636103559160979476616477346087321793493610327168813753246371276741517043132260223821491841146245345574053705768425640967520901958903818938763582431578456230704123222738245057143061415267131700352443491866442999075561835131847588699286213386070644200163500510739627252459287990417367944647121272440817815556900606585448029768014595673432426307740330472602898838455242620811831656031936032319412225140490139118788352647528486278561404226894927696147343557131025403623909262496919705318530904485672186931223461433533661914234849879831610614022203540171407247294834080568233632201584738051729160723191297967044401662575226081189955895572187848526549212528704504032466392718464031245794892286824933147331385560968260462507840461040577699484859572992583536016957838365989584803705244141236824650032693882622111810486795311124941174647877601799592637182036500914064001725895249240560213306161682650860904636786346712298248258838711503464

import gmpy2

from Crypto.Util.number import *

import libnum

from sympy import nextprime

q=nextprime(gmpy2.iroot(n+(n>>1000),2)[0])

p=n//q

phi=(p-1)*(q-1)

e=65537

d=inverse(e,phi)

m=pow(c,d,n)

print(long_to_bytes(m))

得到flag:flag{l@ve_B2s1c_M0th}

2.RSA2

题目:

rom Crypto.Util.number import *

import gmpy2

from secret import flag

def xor(x,y):

    return x^y

pad = (1<<2020)-1000

p=getPrime(2020)

q=gmpy2.next_prime(xor(p,pad))

n=p*q

e =65537

m = bytes_to_long(flag)

c = pow(m, e, n)

print("n=",n)

print("c=",c)

# n= 3126190807509417183715005770190542045340931172251960320581879619823569844754784898781491821356636012847355317437008525956481197166398993716445295963373159468055163106987458326718203096026445943460711650613139291535550052529099228487825952931586085972292804012781704072532123783354496243318492303969538979657465267242298543497937210251211803178216671251540090952348948166735385241385780409054627835379250392089992855760579081692585959920817597015476512215455936637611603375859429951411118267385119698976280524809574711559558292258872648543513981018692037309695818479476749884467774313599896043210290348811675869099043867400925494455276621066202685305550513586583278327986077700137373074518341992876782032255865119809131542917149402837092986053849863196471086300650997213820672062557747297399892986162204103917973345656579496032573234668873248681137919243108652085432182532104699129008654533096528816903089000964286639105266911919590785401077941357145255525949108859437739312185637537586140486148235723671189763319938773593869239437615119308779888783213496491021059399562694708100596823560534098049159433089534304018033231132568663654890791720392912923117165560390836506910864982652162375922897716192954877021500401851

# c= 2655264538951933441831453155776485430529263231671953867942979701843533126938451965652159458180794982841935768067185972286649814055750311154953168032644165565995350847077677058984377411270084998553754639859876283722864562928687496617047440953812261349603925927559469755005053635871967297260223173733896658591666639613616456010712942544226088604650636023290255183240351087687629104171895801845779171560903910314974095807166609587751743355471197874731525414997899460605187896347645292691505879108829851611974451684926962760322659986289096904407666544858743281462221316011649998465272520207044359306830999377323725769440920483882983951132648284302750382438701825896416748763602151513130371823891171540190418715188120820234666817891755771451495835088298513477449787816489685923821205814223804718803025851360200493152105505263085678832779849048506171724497734129738701490450243492519838065495108053750766814999322191104964207512466219259380766351977688544772042838237675300217637545949521272832109891014000205142200341510094570088316780356790883059422421043943544113613280327717630110261363330059108355337006614798753576134645282696844674022760409780794638484850116665454858660524676237657324946850162507767631241038413618

wp:感谢裴神的分享http://t.csdn.cn/sREF0

一模一样的脚本,跑出flag:’flag{Y@u_Kn@W_Fe1m@}

3.羊城杯2021:BIGRSA

题目:

rom Crypto.Util.number import *

from flag import *

n1 = 103835296409081751860770535514746586815395898427260334325680313648369132661057840680823295512236948953370895568419721331170834557812541468309298819497267746892814583806423027167382825479157951365823085639078738847647634406841331307035593810712914545347201619004253602692127370265833092082543067153606828049061

n2 = 115383198584677147487556014336448310721853841168758012445634182814180314480501828927160071015197089456042472185850893847370481817325868824076245290735749717384769661698895000176441497242371873981353689607711146852891551491168528799814311992471449640014501858763495472267168224015665906627382490565507927272073

e = 65537

m = bytes_to_long(flag)

c = pow(m, e, n1)

c = pow(c, e, n2)

print("c = %d" % c)

# output

# c = 60406168302768860804211220055708551816238816061772464557956985699400782163597251861675967909246187833328847989530950308053492202064477410641014045601986036822451416365957817685047102703301347664879870026582087365822433436251615243854347490600004857861059245403674349457345319269266645006969222744554974358264

wp:已知两组n用同一个e加密,p一定是两个n的最大公因子,分析完,跑脚本

n1 = 103835296409081751860770535514746586815395898427260334325680313648369132661057840680823295512236948953370895568419721331170834557812541468309298819497267746892814583806423027167382825479157951365823085639078738847647634406841331307035593810712914545347201619004253602692127370265833092082543067153606828049061

n2 = 115383198584677147487556014336448310721853841168758012445634182814180314480501828927160071015197089456042472185850893847370481817325868824076245290735749717384769661698895000176441497242371873981353689607711146852891551491168528799814311992471449640014501858763495472267168224015665906627382490565507927272073

e = 65537

c = 60406168302768860804211220055708551816238816061772464557956985699400782163597251861675967909246187833328847989530950308053492202064477410641014045601986036822451416365957817685047102703301347664879870026582087365822433436251615243854347490600004857861059245403674349457345319269266645006969222744554974358264

import libnum

import gmpy2

from Crypto.Util.number import *

p=gmpy2.gcd(n1,n2)

q1=n1//p

q2=n2//p

phi1=(p-1)*(q1-1)

phi2=(p-1)*(q2-1)

d1=gmpy2.invert(e,phi1)

d2=gmpy2.invert(e,phi2)

#按照题目的方式倒着解密

m=pow(c,d2,n2)

m=pow(m,d1,n1)

print(long_to_bytes(m))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值