梅森素数
梅森数是形如2<sup>n</sup>-1
的数(n
是正整数),记为M<sub>n</sub>
;如果梅森数是素数就称梅森素数(Mersenne prime)
截至2024年10月已知52个梅森素数,最大的是2136279841-1
题目:
from Crypto.Util.number import *
flag = b'qqqy{**************}'
p = 2**??-1
q = 2**??-1
n = p*q
e = 65537
phi = (p-1)*(q-1)
m = bytes_to_long(flag)
c = pow(m, e, n)
print(f'n = {n}')
print(f'c = {c}')
'''
n = 1255340353831728522667127378569941195679016476861282151081381898904107294002306406739040373722612268734555954678598294627098720567616535540109307157792144350235822750633009200911800864194233368648610074223409066574737967219597967762198077307370419040134477614452306056906405981686106637993591936563302673793868143536452585629146738293120158241976042069693761602726190517367384069997532400331736268054695834150225853066157935356482146149240993862639438946186387960559096953553660147376088122874279607479464600903728749191363268011061308693212804284082606571240499244673416986940393396690182471662365230269017370485910865354841457418524298831746969989407055548214031573839976349036252778350249089408696752503670055081423912526897376153406618558669757830168472981534053309467722325816210361187344391669006864424535197956352482496007526012334031874826225917230222481225112935241264948750254708627115001840900806444941559573435694234857850255571091775969948547339807222027308169666211385463550074390435841644363060976899150974022032378378070796408128360912710819049640807137424882072584731031051838908072581602488283672571716707528306500665839469412260323430975203263641447116708173491095716467370862903514688281870611476600773506127910048434229513399587654568213787094984855832511257141028273587216007937208845479204442296421192838156688118519136003455886469088985675531688944539894566234818717578733444284480932761131517895329057967711484718928573296505616785823571639794087897452434273069129744061530143160992784141034472156338579619031579332914333968579264798623843481947454616214273466083821828810449311292743206994583158350560932334999219649436807903911200027692924945429090647773837628391723025042304257682918889348744398337016085233695306078157633744186644273524589097639176575979898259641546288884137226571519168660075228095247109972064815688958360160358240649345831777087069919037141421398622735747939871975870593631819679028723480065786898579381188196134505936678584430316234741704304420262302618533213949515744343648800593393298601032305696293707192965551706202987235650496716016023540134064760857550281574168693743416493954376701606604442487446910983126471437131191944697564162287276304991300982883586056851237771239390750594231463864962329871809014257443538245637721763918049879260514414361498549677127556964201732056209084053788480935034900822096581555104013937841420592803516519813325831400845491172316079570870360396034027015107960951920230563129506974693794893267126485712555811608911148188059104971017515431380747590181248501798731807599899640044560860646326770787586247465253479280899390519191333925881683149248740933437932283838698562664931639750830944726482537537976127987711044394501689759030022466068973013785432083844020874557826264802483476367711632679755823168692000544432091660527076421254465515670760736324834166222483454190399127542566320239624628035998561732292821328838817129842260312112471741302680095791699635964706775385733874657539044258949957982452492635244587004343711326541880672199603032786126392324313844960010336635399556518746816286485024261099346724086765030157129277653079000400678446227513387449849564086225022529225838298100711011285369307712021490680144073557807398665978050601753643946610452710044653629867116867390396900932170236853537058081850202288092177963738734477370475552930059809412141714675880887746506139117084593413207195074723722470844182681897479898448544458831101314097626273346836380928824358384416883932451366732033542308875665629111802233724006742670482813933473953184745844743006259793238619734509880898678794593762145530077622913360750024289991304187482862921506665132932752005132007519725796496609505096324071271197785824720190091004087180867558500229283559582333000067538999623015673753631735358847942154228801629144560934378989104145025094008454416470937998284570022038824251947286246826129535072294434190095168156572865229582988075680525761888065713201521960284375379921061485839214171701716887137062700492368593249652015292961546345652257848179729715320708305178278538974707493945132572517335041
c = 835212581324900295905665831069729815733421922680439616763915434182072829756396029496308283993088256573360208659722329818410749214988027730964756407328422923428637128838374508219087814661880220089977944244950692153451547922855077288641614820745988749053277808675909200585372760392903025218365070108561632580502901088523802173549720508539809378278820495155756405582656612134986276436578106125995071417529538498974937520425028905548232113331960493908866132333509709702022325780346152158989865863927187475379463376529811749683762277052733791511449672683671923091624060361318196541875692577596464341774967943718112768291869039512342669164458613059931754205565320665622705492465590512751310439927600897198093484471070143430927357154769043860186257780326295729432170398772821000693265000149915767203862097539596936401976598332031782141226498567877223694964465331285606746182288154277778401149799623462229268527505823697588333553888356112023310788033803320866814654836448273274134570413918685473085089101505367610641498358317042040290329101210854143450443618151172125068238530783235287216922231212004913149897557654552430814348695312382290962010333874484355855626924806836088706828361167002563045504713791126200489862701252824586987953152272398814776502767365994648654050116728988956878095536039860745184343790579711812894799677488029010379108056226604905007040547262600950877123081236484498960223654743941073194155291141289117037980148167232954812332361723045496335583640458651325824274759660044332720863789466574109859144057586859774114932108113331922825357793110502964485580672303224975444673534400240486343770257539505460228916592794868962851960001278725810778581468071115632878990913130388080362549001689392601454636868200570195608823168886149243468612074750060443302252023978729048404973574733290387337765326943256693981155937742246586022236049605142924828543049091890581271115225805272423626144359305843855276505620817739478686269646203101022153736920645586095244726078876761578260215045813467467112797180944229385322167389084993495222411296131632381536431346263281152311297442758970664979562307215636606466527766289267928990175802413142781115065740170538217428743604581272860583085693134668620341112316335180533094817952206187312165337994096140692088924828222148754961736588453887137742449820154477414240433966103441786162557518467734325703840425292348394795967922847724077756268102149037002662974911120202100774595026016092164383360758500694085003190794762887695341304022403116337292280191603959037439625769618175257253648573330797020638606803136541431713669825316280554173036750354846504629630218398516806166538015796723990915458726242279145766512776106080577240259860066642687094804982904901015940447210916926288677172405569232288982191688392934218856441160100544680579923889586809951529103152306061898157058831478465632621566342135932595396946983411501220729940971631462132390718973405115960532182531281985779049327199301993712377013118600718186527665769844715857211583836034630095895835927341424997374255310041607939247688980160917646021262021663076907320289732531402529912814663080750439545237077675816888814291527576158100104608692857887242085507825837893207910398478542424459733478000060895588706853974591338405252147152532659474433181642413803214637423535917879345916263563795208914521045131552039680183641357290744183268457172654325889295961755184030866279385876579168524784258345961783879971434668412552567197215614864400216100044329971860762392713726804188921926726752010873427021870283052770661638424560628989173956906922792429258542293031980030576027521841122375621914546754084232392750956906831226063422531274673411024770869638845704140646518111323976508628279145060531829639737998763823786907344963261821807251101826083773739445659008927529248956636019556115926164625181011874760793274873246925110046571368632196098595458450252311135994346349090361358572164235401992549406071895093477292437260789069560899827964103012263061371191584096504929549490190635944897041480063192570215541701806028359318930512387572104328384642434275419267303707592724283
'''
解题思路:
- 目前已知的梅森素数不多,直接遍历一下,如果出题时选取的指数过大的基本就算不出来了,所以出的比较小
解答:
from Crypto.Util.number import *
from gmpy2 import *
from sympy import mod_inverse
import math
# 定义前30个梅森素数及其对应的指数
mersenne_primes_with_exponents = [
(2**2 - 1, 2), (2**3 - 1, 3), (2**5 - 1, 5), (2**7 - 1, 7), (2**13 - 1, 13),
(2**17 - 1, 17), (2**19 - 1, 19), (2**31 - 1, 31), (2**61 - 1, 61), (2**89 - 1, 89),
(2**107 - 1, 107), (2**127 - 1, 127), (2**521 - 1, 521), (2**607 - 1, 607),
(2**1279 - 1, 1279), (2**2203 - 1, 2203), (2**2281 - 1, 2281), (2**3217 - 1, 3217),
(2**4253 - 1, 4253), (2**4423 - 1, 4423), (2**9689 - 1, 9689), (2**9941 - 1, 9941),
(2**11213 - 1, 11213), (2**19937 - 1, 19937), (2**21701 - 1, 21701), (2**23209 - 1, 23209),
(2**44497 - 1, 44497), (2**86243 - 1, 86243), (2**110503 - 1, 110503), (2**132049 - 1, 132049)
]
# 给定的n值
n = 1255340353831728522667127378569941195679016476861282151081381898904107294002306406739040373722612268734555954678598294627098720567616535540109307157792144350235822750633009200911800864194233368648610074223409066574737967219597967762198077307370419040134477614452306056906405981686106637993591936563302673793868143536452585629146738293120158241976042069693761602726190517367384069997532400331736268054695834150225853066157935356482146149240993862639438946186387960559096953553660147376088122874279607479464600903728749191363268011061308693212804284082606571240499244673416986940393396690182471662365230269017370485910865354841457418524298831746969989407055548214031573839976349036252778350249089408696752503670055081423912526897376153406618558669757830168472981534053309467722325816210361187344391669006864424535197956352482496007526012334031874826225917230222481225112935241264948750254708627115001840900806444941559573435694234857850255571091775969948547339807222027308169666211385463550074390435841644363060976899150974022032378378070796408128360912710819049640807137424882072584731031051838908072581602488283672571716707528306500665839469412260323430975203263641447116708173491095716467370862903514688281870611476600773506127910048434229513399587654568213787094984855832511257141028273587216007937208845479204442296421192838156688118519136003455886469088985675531688944539894566234818717578733444284480932761131517895329057967711484718928573296505616785823571639794087897452434273069129744061530143160992784141034472156338579619031579332914333968579264798623843481947454616214273466083821828810449311292743206994583158350560932334999219649436807903911200027692924945429090647773837628391723025042304257682918889348744398337016085233695306078157633744186644273524589097639176575979898259641546288884137226571519168660075228095247109972064815688958360160358240649345831777087069919037141421398622735747939871975870593631819679028723480065786898579381188196134505936678584430316234741704304420262302618533213949515744343648800593393298601032305696293707192965551706202987235650496716016023540134064760857550281574168693743416493954376701606604442487446910983126471437131191944697564162287276304991300982883586056851237771239390750594231463864962329871809014257443538245637721763918049879260514414361498549677127556964201732056209084053788480935034900822096581555104013937841420592803516519813325831400845491172316079570870360396034027015107960951920230563129506974693794893267126485712555811608911148188059104971017515431380747590181248501798731807599899640044560860646326770787586247465253479280899390519191333925881683149248740933437932283838698562664931639750830944726482537537976127987711044394501689759030022466068973013785432083844020874557826264802483476367711632679755823168692000544432091660527076421254465515670760736324834166222483454190399127542566320239624628035998561732292821328838817129842260312112471741302680095791699635964706775385733874657539044258949957982452492635244587004343711326541880672199603032786126392324313844960010336635399556518746816286485024261099346724086765030157129277653079000400678446227513387449849564086225022529225838298100711011285369307712021490680144073557807398665978050601753643946610452710044653629867116867390396900932170236853537058081850202288092177963738734477370475552930059809412141714675880887746506139117084593413207195074723722470844182681897479898448544458831101314097626273346836380928824358384416883932451366732033542308875665629111802233724006742670482813933473953184745844743006259793238619734509880898678794593762145530077622913360750024289991304187482862921506665132932752005132007519725796496609505096324071271197785824720190091004087180867558500229283559582333000067538999623015673753631735358847942154228801629144560934378989104145025094008454416470937998284570022038824251947286246826129535072294434190095168156572865229582988075680525761888065713201521960284375379921061485839214171701716887137062700492368593249652015292961546345652257848179729715320708305178278538974707493945132572517335041
# 检查梅森素数的组合
def check_combinations(primes, target):
for i in range(len(primes)):
for j in range(i + 1, len(primes)):
p, exp_p = primes[i]
q, exp_q = primes[j]
if p * q == target:
return (p, q, exp_p, exp_q)
return None
# 执行检查
result = check_combinations(mersenne_primes_with_exponents, n)
if result:
p, q, exp_p, exp_q = result
print(f"找到满足条件的梅森素数对:\np = {p}\n指数p = {exp_p}\nq = {q}\n指数q = {exp_q}")
n = p * q
phi_n = (p - 1) * (q - 1)
e = 65537
c = 835212581324900295905665831069729815733421922680439616763915434182072829756396029496308283993088256573360208659722329818410749214988027730964756407328422923428637128838374508219087814661880220089977944244950692153451547922855077288641614820745988749053277808675909200585372760392903025218365070108561632580502901088523802173549720508539809378278820495155756405582656612134986276436578106125995071417529538498974937520425028905548232113331960493908866132333509709702022325780346152158989865863927187475379463376529811749683762277052733791511449672683671923091624060361318196541875692577596464341774967943718112768291869039512342669164458613059931754205565320665622705492465590512751310439927600897198093484471070143430927357154769043860186257780326295729432170398772821000693265000149915767203862097539596936401976598332031782141226498567877223694964465331285606746182288154277778401149799623462229268527505823697588333553888356112023310788033803320866814654836448273274134570413918685473085089101505367610641498358317042040290329101210854143450443618151172125068238530783235287216922231212004913149897557654552430814348695312382290962010333874484355855626924806836088706828361167002563045504713791126200489862701252824586987953152272398814776502767365994648654050116728988956878095536039860745184343790579711812894799677488029010379108056226604905007040547262600950877123081236484498960223654743941073194155291141289117037980148167232954812332361723045496335583640458651325824274759660044332720863789466574109859144057586859774114932108113331922825357793110502964485580672303224975444673534400240486343770257539505460228916592794868962851960001278725810778581468071115632878990913130388080362549001689392601454636868200570195608823168886149243468612074750060443302252023978729048404973574733290387337765326943256693981155937742246586022236049605142924828543049091890581271115225805272423626144359305843855276505620817739478686269646203101022153736920645586095244726078876761578260215045813467467112797180944229385322167389084993495222411296131632381536431346263281152311297442758970664979562307215636606466527766289267928990175802413142781115065740170538217428743604581272860583085693134668620341112316335180533094817952206187312165337994096140692088924828222148754961736588453887137742449820154477414240433966103441786162557518467734325703840425292348394795967922847724077756268102149037002662974911120202100774595026016092164383360758500694085003190794762887695341304022403116337292280191603959037439625769618175257253648573330797020638606803136541431713669825316280554173036750354846504629630218398516806166538015796723990915458726242279145766512776106080577240259860066642687094804982904901015940447210916926288677172405569232288982191688392934218856441160100544680579923889586809951529103152306061898157058831478465632621566342135932595396946983411501220729940971631462132390718973405115960532182531281985779049327199301993712377013118600718186527665769844715857211583836034630095895835927341424997374255310041607939247688980160917646021262021663076907320289732531402529912814663080750439545237077675816888814291527576158100104608692857887242085507825837893207910398478542424459733478000060895588706853974591338405252147152532659474433181642413803214637423535917879345916263563795208914521045131552039680183641357290744183268457172654325889295961755184030866279385876579168524784258345961783879971434668412552567197215614864400216100044329971860762392713726804188921926726752010873427021870283052770661638424560628989173956906922792429258542293031980030576027521841122375621914546754084232392750956906831226063422531274673411024770869638845704140646518111323976508628279145060531829639737998763823786907344963261821807251101826083773739445659008927529248956636019556115926164625181011874760793274873246925110046571368632196098595458450252311135994346349090361358572164235401992549406071895093477292437260789069560899827964103012263061371191584096504929549490190635944897041480063192570215541701806028359318930512387572104328384642434275419267303707592724283
d = mod_inverse(e, phi_n)
m = pow(c, d, n)
print(long_to_bytes(m))
'''
p = 446087557183758429571151706402101809886208632412859901111991219963404685792820473369112545269003989026153245931124316702395758705693679364790903497461147071065254193353938124978226307947312410798874869040070279328428810311754844108094878252494866760969586998128982645877596028979171536962503068429617331702184750324583009171832104916050157628886606372145501702225925125224076829605427173573964812995250569412480720738476855293681666712844831190877620606786663862190240118570736831901886479225810414714078935386562497968178729127629594924411960961386713946279899275006954917139758796061223803393537381034666494402951052059047968693255388647930440925104186817009640171764133172418132836351
指数p = 2281
q = 2814112013697373133393152975842584191818662382013600787892419349345515176682276313810715094745633257074198789308535071537342445016418881801789390548709414391857257571565758706478418356747070674633497188053050875416821624325680555826071110691946607460873056965360830571590242774934226866183966309185433462514537484258655982386235046029227507801410907163348439547781093397260096909677091843944555754221115477343760206979650067087884993478012977277878532807432236554020931571802310429923167588432457036104110850960439769038450365514022349625383665751207169661697352732236111926846454751701734527011379148175107820821297628946795631098960767492250494834254073334414121627833939461539212528932010726136689293688815665491671395174710452663709175753603774156855766515313827613727281696692633529666363787286539769941609107777183593336002680124517633451490439598324823836457251219406391432635639225604556042396004307799361927379900586400420763092320813392262492942076312933268033818471555255820639308889948665570202403815856313578949779767046261845327956725767289205262311752014786247813331834015084475386760526612217340579721237414485803725355463022009536301008145867524704604618862039093555206195328240951895107040793284825095462530151872823997171764140663315804309008611942578380931064748991594407476328437785848825423921170614938294029483257162979299388940695877375448948081108345293394327808452729789834135140193912419661799488795210328238112742218700634541149743657287232843426369348804878993471962403393967857676150371600196650252168250117793178488012000505422821362550520509209724459895852366827477851619190503254853115029403132178989005195751194301340277282730390683651120587895060198753121882187788657024007291784186518589977788510306743945896108645258766415692825664174470616153305144852273884549635059255410606458427323864109506687636314447514269094932953219924212594695157655009158521173420923275882063327625408617963032962033572563553604056097832111547535908988433816919747615817161606620557307000377194730013431815560750159027842164901422544571224546936793234970894954668425436412347785376194310030139080568383420772628618722646109707506566928102800033961704343991962002059794565527774913883237756792720065543768640792177441559278272350823092843683534396679150229676101834243787820420087274028617212684576388733605769491224109866592577360666241467280158988605523486345880882227855505706309276349415034547677180618296352866263005509222254318459768194126727603047460344175581029298320171226355234439676816309919127574206334807719021875413891580871529049187829308412133400910419756313021540478436604178446757738998632083586207992234085162634375406771169707323213988284943779122171985953605897902291781768286548287878180415060635460047164104095483777201737468873324068550430695826210304316336385311384093490021332372463463373977427405896673827544203128574874581960335232005637229319592369288171375276702260450911735069504025016667755214932073643654199488477010363909372005757899989580775775126621113057905717449417222016070530243916116705990451304256206318289297738303095152430549772239514964821601838628861446301936017710546777503109263030994747397618576207373447725441427135362428360863669327157635983045447971816718801639869547525146305655571843717916875669140320724978568586718527586602439602335283513944980064327030278104224144971883680541689784796267391476087696392191
指数q = 11213
qqqy{mer5enne_pr1me_1s_funny!}
'''