2022年4月9日和山大打了一场校赛,打了两校个人第六,密码分项第一,密码方向放了七个题出了四道,感觉这次密码难度梯度设置的有点离谱,简单的那几道板子题一放出基本就能秒,做了道难的题死磕了一天。不过我觉得最后能出这道比较难的题还是挺有意义的,也感谢学长的一些战术提示才能最终解出这道难题,先来分享一下:
Random-RSA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 from gmpy2 import next_primefrom gmpy2 import invert as inverse_modfrom random import getrandbitsfrom Crypto.PublicKey import RSAfrom Crypto.Cipher import PKCS1_v1_5from sys import exitfrom sage.all import Zmod,matrix,vectorfrom secret import flage = 0x10001 e1,e2 = 6163 ,7411 encrypt_flag_times = 1 def generate_prime (bits:int ): p = (getrandbits(bits - 32 ) << 32 ) return next_prime(p) def generate_private_key (bits:int ): p,q = generate_prime(bits),generate_prime(bits) n,phi = p * q,(p - 1 )*(q - 1 ) d = inverse_mod(e,phi) privateKey = RSA.construct((int (n),int (e),int (d),int (p),int (q))) return privateKey,p>q A = matrix([[13 ,11 ], [19 ,29 ],]) BANNER = rb""" .--------.--------.--------.--------. .--------.--------.--------.--------.--------. | C.--. | A.--. | R.--. | D.--. |.-. | S.--. | H.--. | A.--. | R.--. | K.--. | | :/\: | (\/) | :(): | :/\: (( )) | :/\: | :/\: | (\/) | :(): | :/\: | | :\/: | :\/: | ()() | (__) |'-.-.| :\/: | (__) | :\/: | ()() | :\/: | | '--'C | '--'A | '--'R | '--'D | (( )) '--'S | '--'H | '--'A | '--'R | '--'K | `--------`--------`--------`--------' '-'`--------`--------`--------`--------`--------' """ global_bits = 2048 if __name__ == "__main__" : print (BANNER.decode()) print ("Welcome to the world of random RSA." ) print ("Please make your choice." ) for _ in range (6 ): choice = input () if choice == '1' : privateKey,signal = generate_private_key(global_bits) N,p,q = privateKey.n,privateKey.p,privateKey.q x = vector(Zmod(N),[p,q]) y1,y2 = A*x print (N) print (pow (y1,e1,N)) print (pow (y2,e2,N)) elif choice == '2' and encrypt_flag_times: privateKey,signal = generate_private_key(global_bits) Cipher = PKCS1_v1_5.new(privateKey) c = (Cipher.encrypt(flag.encode())) print (c) exit(0 ) else : exit(0 )
了解代码 先看完了一遍代码,大致的思路看到需要解RSA,无论是加密y1y2还是flag他们的模数因子生成全部依靠随机数,那就还需要进行mt19937随机数预测,注意到素数生成:
1 2 3 def generate_prime (bits:int ): p = (getrandbits(bits - 32 ) << 32 ) return next_prime(p)
这题定义了随机数生成为2016位63组左移32位的下一个质数,这里我们先测试生成一个:
1 2 3 4 5 6 7 8 import randomimport gmpy2def generate_prime (bits:int ): p = (random.getrandbits(bits - 32 ) << 32 ) return gmpy2.next_prime(p) print (bin (generate_prime(2048 ))
跑出一个大素数:
0b110001100101101110001111011011000111111000010010001011000111101000010001101010011000001011111001110100001111100111100110100001010001110001110000111001000110001110000101010111011011010011010011010000100010100101110100101010100001101101000001000110111101101011001011101100000111011101000100001100011011001011110010001101010000010011010011110010101011011001101101110100001001011111100110111011001000101111011000000001111000101101100001000111100111110101001100011000001100010111001001010001011010110011110000010110100010000000011100010111011100000000100110001010111111110011110100010100011100101100110101100110101000101101110111000111110100110110111111100001110000110011101000001000111011001011001110001101100101010000011101111100001000111111011111011001100111101011001011001111100000010100100110010111100101100011110010111010011100001111100100010010000001010101111110001101011101010111010111101111100010011011000000001010010110000010110100001000111110110101111100010111100111001101110011111100011010000110111110001010110111010101101011001100101001110101010000100101001010111100000001000000001100010100110101111100000100001001101001100101010110000010111101011000101101001101010010110001000101011101101101010110000100010110001100110111011001100111110111100010110100101111101100010000001000111001111000100000100100001000101100111100001101001111101111101001101011001111110001010000010100101101001111011011011110101010001001011001100000000111101101011100010101110100100001000011111101111101100000110100111010111100011111110000001110001110111100100011000000111000011111111111100000100110001000101111010101001101101010100000110101000010111110000110110100000100111010010001110100110100101001011001101111101000010100000101011101010010111110111111000101011000010100001101100010011111001010000101100111001110110100110011110000101001110000001101011000100000000010000110010100101000101000001001010110011011000001101100000100001001001010101000111001101000001000010110100010111000100100111001000010110011101100101100111010100110110000000000000000000001000011000001
观察最后32位,左移32位补0后求了下一质数相当于加了一个小数,实际得到的因子素数我们再对它右移32位就能得到最开始生成的63个32位随机数流。
每次选择1时,题目只返回N值,需要因式分解才能得到这些随机数,而且一组可以得到63×2=126个,五组可以得到630组随机数,足够进行随机数预测,程序交互主体的大循环有6次,卡的非常好,所以这题如果需要破解,需要先交互五次1生成足够的随机数,再交互2得到加密flag:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 nc 43.143 .252.108 5244 .-------- .-------- .-------- .-------- . .-------- .-------- .-------- .-------- .-------- . | C.-- . | A.-- . | R .-- . | D.-- . |.-. | S.-- . | H .-- . | A.-- . | R .-- . | K.-- . | | :/\: | (\/) | :(): | :/\: (( )) | :/\: | :/\: | (\/) | :(): | :/\: | | :\/: | :\/: | ()() | (__) |'-.-.| :\/: | (__) | :\/: | ()() | :\/: | | ' -- 'C | ' -- 'A | ' -- 'R | ' -- 'D | (( )) ' -- 'S | ' -- 'H | ' -- 'A | ' -- 'R | ' -- 'K | `--------`--------`--------`--------' '-' `-------- `-------- `-------- `-------- `-------- ' Welcome to the world of random RSA. Please make your choice. 1 319921123311250552662963566647233721176500532097925505551548615965620926886290107004282962564396760204590468753354087637632596627283389303984969095543538774832852895025313854336617682706352197362418638206543073301189608132934178272448280700099991086560803792660780736921365654510536546191545903820825352164469145200595638053567489038365292280396297682441017231601120272720968293290636862864945870109310394015619502123336027505110147899564501295941242844401235448208551347533131793232155203435166720019251796222917958737174696093799200811639151889416773884099138368196585180556987089906154502751274251702921482591707082824826896528955613182269483843333285568738360741886640681092035773605438887662505159270796669448808076856295823895234264196954633882031001724935347719732441864407930514810976560093125404511952867209059623444494325114594996641049835394499590618767684304963563299049578241522328014002403690904185320105830639934733326227045308680083189915718559098864854510435072431091298351365139202359934453258210782585368099447241705559813727602307985927435898194839439434163080058496044725980779306785235534486901948642672517025391781421160093032191831056281446632496876808397979406212517252958889052537024809161355990518029929969 248292875804004341487193963587418460793015860983343659729627383649600562154259358584129320729975693092182850315023754970095027674177520062160081385829489999398851656460396267064471651504991787753897600165464399162714333725852108264765404549646356689169774328016897055213513659098660700163238808314499831273389824485995857140645954536717894810800060744488273316547697541161681415958432943782338051016988235483006770823488933136897020554203178244197502012795053551048100276519840224992613689013732623028934965584811831143911305441779886260797220241977972033615990028418358826359968343897398821106856094954413945798907918678293183082235577560119112547038959525148322763823839046696386613319994738999783947199590531544768775692808847538511358347345961677089604593395682205308621002457663787631613273274022455500740217424160275888894292062475958187405993289602952730106121166185714356643453390540638758319675521881312024226126409644961686094789094555539949200025541322509192008502810890673721136882951683534363469649407225558267779718952546008673217922105075461128591140566706367413899119360441045405844432445235817784608668283513141813047885521529347709023277444323912888989918220180834119379811483872772135494735140660228469428830964530 296180744100107627758305803516955340735558610309703831618835666444138490117343532242009220325303295510764934839650890329415913083510508318219183867155229006613035882800097723061091284831633060962879325372568115856456841602547580917291722852871793433471643367474974123185317625795292746401531802938675718785468748265718598756597678742309285333084753463463911170855807120117785391014177340178847064198532628205532901940135177816329079615728225052445221533435398969165247298426483478788736418651645495975740824617906545979330594372548117600367071940846614291762730294798674263510602807627691374990413772565733031188485081012803619040113850825410586940777678530030755343410465305025316354508831191088580419179330492687487852916636844333217073647477740970328528182474872923076646152213713921452837288812643386947407603759919404325424354630405612235758684539078304413046133956422960652314198670078399947591407271051787044259051554945886192870328524690468787651125309448228277503786656782815364975714286271137126118656004127038041167492890493455265764937552969782098992644454795704577084669939924649658297313008791286459600996857834780090659852975185140737006153546204113199194069050763512604482342589174038583411788997367584415563743340790 1 599110224308422610498885243404312429997177742018723070681626765267732786181152678750071483014346760950051734617610980049030890074185326986414140752740945426043572643718817292642671545022342097343164320475481125005511915062386511192750531215560323637471972117741700673604936286573301916241384756976273580685682913548756589981155428792124150225941178642113257150679698880071645553511181173883345101469622719344233722291848031318477750188110862073613213668753924645928575076145217645286278155576444910095487452856165516739845826060854104698626407038868953736697171989625407302305007912084794500759881256763408658774527496156696874315726095000344088043895258903767834768991583323537732703746682458050075635230240429775422444182740441361192690178542018467094016140059649350780667573179467800446685269685769332444562674125273351147969810077129441223813961453867316628820306319223876400075876373647814797515239817206564861314231194035802487996534734716180541499231064733286600825832248720133058267665225372986667999830641679212573884132642066093974917737361905234891402070297053289894322630861180118358700800642277403667514430348500006973280512066703404817926073682890049469420438004128393903376795534421609536502403618737354345776767809557 176931389707528532333643293274655713467866080265053285136083463468262516271121733861463524578770503903299476192462414217588405103808830287418952647224740674444215065272324677390543276613816896053074302438652440655659641657537193059597393638416182901134595550137990263713298057951419194342430107780930999038188587153994124570186567704205312650035672893717801156504083484824727347400152678323131659525133752194372791942803899593097694860937464143593457219248740023332020372072436505120470558928852088434764645410055511263334761560328097444749789959966376288430211336459557555092046090064609896642870596113288694780225634647867281210671117808505871363263226868334708852922005728999508478078595523108156621337361245586806939274383146616685906803790102031200753657833809494074618641106092244627257806217431922190455598898638812355858202024312198560056114954424987895506430303657593394391539732055591630532027063746485277742767328761858501447181667397420384446040681677602749514035730844334140735074282955968546966184623952444350809497205207100479517975199861131974671098056262855687103144442821719415871807018371037443387516644803223973850308829061960130368378893261176986431944217973608429502911805758922786547560778452649318154612861967 207825535879623865503097506381310741807898563342999422545658227690482860570590516383855935273188527718395578010504901652766942519822324143510275994937930872623748070639611098588454967901146797122950194632033675562625783763405679992217014873537762961389175695619305119730391390356873938973446359987881369521735928896421165165050426604099270352684944316840363736268429526864889718104018006472013834578999658151840662269815703540065548283955329961781918836244179184012652332665537289529366969067032441841608013817519301029589854737293888059968854497590399682532480192708166880928264360458819249385985000132745990937500956684132997265337340990054223510325085325876943187026146893100295481827820789579613628373021305786762272014306651642062049190186870382876032234837379443353344294059752180789659187717099411362684483418311653654534993658405246985723278808212555344671100837992053963688157637616963241685755348784040248979693639307270954751360300904564908809513136996918206562709964367755857169510548126386207318744970653803079758998769906758394220917327699200076235635461400456496200309572279548621825633543713359900504179332751555630351786079010244112977343569035465586377711479592257479060619330888392439487337503238360580548529118774 1 384998826819481882761848191143359204391153792102936797952487123431795928602128228587925293269182641167333316395663009756616057078812914618103709914853868671213075759006388222112859289793312785125519599636704794089696100330011788336290676549232518198379997908178761546709231733881624365460039160081054662380632396689836832546615865310275182804640492770868708692058413252519866099664032024736179195034707926990571556586839756024744587488152752561291138873158856991517081521016889242469285819552719905725580617648713215279020396226216541318638673492101090271474958210917505042292032944041085352664672037560206133336097289055143608958748235476744694786360538392614406079700804431378395467269765783246340309258568191256941214374291469991923243836682113882179730002144373914685785923439171546254291846453692663231157825191665781110039101517064225839961966881165888243102656766016651525006389085782969509941189752601844238960885306992131990050538920017436228174787367041358825007811717342276269001986620224870765641387156394784345759115202096559242992905646357564409484140096867391264765421036587476574846172385130923429202440439497574125845193100612292676551657321277120751650068237013326247682286358745901149134831233360299637481478476501 263412959517528061532217746494794166082281553294199674428880147566246392753433764409953717919033289918824130484554076531357124324259498287499308866073220118826317609200284908288861969777215595841788765768992142011859613032976380802799562284652189395740386141224142260554976714706959099938813238493527211646768966072650649975671968174558189981715133171111486170067853989114337687853470560553517486354345050390387023851238181351095655806518004184932302016785690637561739925436741947888687661210178752387715595895021756008188472827201005709762448457715023486287232182254910421892998725128850133130650731062190401584089260857064324303526505680880583681332678447312646319534097554377495547408990027316588003909189937934533078846641447285404727313766068726950684894154368494881686483287672487479510050747957229496328638768715372506730837466648041842900978823550603103981055081374871877726693269296223748736317192577870785252905659796624463797774864114025525725228963680130973220639435350168518740097315345932723631297793189729156242238540526331759878310860878056060933673445786292478116901951419570480091573958293874614303092653905723270744036932717042344970542962385957902035661776041125118772704377131246174272394870998129203448444725457 379141106506112115015622970987612647085791358706332228662782435574383644676152728354901732525171316822080494398925057112244202125081035390441248680561723571333542354357533545503976082670155532027042252094502311476538022286377130159789512873129175565554261137462364776243241919928277766680994345146728975502967017499701417224964087080949167650105441912270149179803259414150473042807136414890312876902363747748668355388769973433905232133239745960886638184079596160490921229840436293043438908796367159430939249778899061028907959673137331957622949868497019067787519906919985945944030095789832143522630084187060738458996618923101199548583721210230171193521188080450859417547063660379782992717082989353180071369686174809343601715811054580233823428833882027715672990671564114924057482648920909420857280646240681251922428786226530645228543301278988185748803982479105788150494880973738178008614500089746956457868272279069731491447479881552976484627779476305213007190643556674347291191236876757632291557039643125132398701129213344780986150303277782898113196403386247175084953623350120919113636506905440280334789880530385758785840713823113405103518810269832345160384661926888648035985189080612407421214999677760298747251058236414655245095652118 1 507245232253935808341536559251331701837149042018245019668938390550258643891056371194634189150221240155457817416421363647814996662621617987154459880940024087015512695828164012075638713135374561699637353865381550036798462896607057683996864793778246319726533085915823440503386062570616735640817366048926965475520405031088255626435556375118364904199343749626096845737830245083121927192440465061149995552046837833655802716107749310515199355826503474221188405390489548162218224078084930458858844022022203284778087366338961303096801879481188705227078317196089916431962827446006365294990445055140495563290653579866892084838798684512066717774937577495068990501882865117535740192140050077440367096171641020261519561740232716507034084869012311774817541750130260940359846263173411914427496187682304043909136422023155688402393218661215002088157756621995273150568685973008999888016136364741781537185135514968218047327827360747635729718588277278127875340312839143652808925545634557874389933187090989855613050361001333248189225142340998930410951347842736412211513706668693633697675716280682959923184620261330324601504956687173647392045782974315575577535746568626528305515290788891435427759726584517509669935697997687347132761440317609787903713772833 124638905226754098806817101032457294027818026677971494020638032730715562312579631139751218085640891949824822961987590218693524984007767250952367221316577733970586428863363878927365121159858236201167468626199615437062864556583857137289152391101677883335117179636284725331078154446512795545548931320054604998696082561634212484005423084065746123675833928694573342777178903003218928956661006433506308115777403479769915801463593189394473925162998131129243252794347652208444796343551190165683495708053585943387165983026025225586503213521312728373798714099368812992550361456831878231181647979530725168365995127709512315425979943920184175875442833726779334700048052511922581466302999698402150250186533257302131814434773611410298304884512272663506831636174410056656041397953118791283468037077063062708252083364173645585027774359881969362081243862169106816969337560807708649492829423385487494334863325503464356219720923038079727910572046592552101622371785835982457894422429358259579858598897194842634038228873614534636634007653502390072087089687058833448985840998420852204735268996943085994666303766339029914202026076638444002681704238375403865888266480808789084663776141406753983837131363745790160009558260880255569728540795480657163657953946 240874010959668572995066513021604834764425643168141336894751714170296379975601634819243224391219902974304208195520659715789892844864738149125965473223544126222013293617461267503458636090904173180107731144768965660013134268114307083405057958491695370283309157490331842423852627395173777572162434426061609818108992902161232015774852198644380599273195910771743171014623866805104568008513252647009041342172177979593802063541085021499402512275261687814491161889425621836508791077467516208035467145268972515958642850076780236306042263622373425617254539706702530330405735315726694484094775104562223077864142620431567761301838030348639899377905928432490666515339610677294311293479799667949121649960116150972134318394444739737272007852466589632871830703701132556614595722322861845953059129079861248033694808791728994607709310890273990485928972362823137452455159402426525721873635741495732972480271703895019278619443851067282718022260194750835579691315723727049269118671182042116905641098827646351397474435913964966466682503360896184533601267594244407375573099196467997005589139020291661910118149590407846330309321371481613870685679721311438357073570062809730718699957486858818038505720111013693243248156523750763299063756297514168747750465364 1 75854144701123527418530520540977973114878453670553534643882219139491306909566751873750088176758684406436763229689376208407654442423255987090092395561042196383263162614865941727286943944745838052909841040506558873374230692573883334829385258214209222741721762230873266837628111684878771035789992785928300972636174142008029210264139228479951126872954369317657960423521963247660759233472768720444568215447251655176638426038985154193450561951816088995111813541660720177003733108376803395757709839771329616920135924277014003893558451863445470200895348470550668369618940621168047082007338039930373702266500734062873406094876687795832254523678271245825888065478094110511855190455844712670793471844450310564737613914997090950777618290642586363118592128104505864959053007490232765809998928156931039879283271663032882671695655080563521554598143954434024975211054267751406687119778148675259865111763405130922970467957254060273774851666343187015289979493015079684632598195423790807537053192669844475177043837267953013535247975192331371568028242008149496566482991252297048372190860668946369071350187804162802690175670871752785725929028598825704746328553329263200182801618773131210391323623123571074275034668806644923614133111322181107531343085387 18582470997758640686236228908085341038225622737681493954917063804738618898712419270474742101006315492643318433628598836816813533694824248045884321325595355841890943617828532403616000912577086644372202645330628765396827331380955730706619925614732897050719845498551519550042822486465698195700395659904399923479294949397360252564375164859658616041418783814270575835086070762241270955845077325769080603136408519397135675438167569509930641059447928283246362575761844787578057228391227525081316282399980870403873890449190699742629249363843763135077397266696525295092990498552303934211282420029219947701605216360988122204256860869270689055525413147030046394542537903178052990908980917559477900583662402097831568581585052609194631770523816521340882539563826686094386375094443448598008561338600827387911487385354500338504586485019285499176828964556777072527901936660378309368240614930466339417396968133120970452985733610014213518831608075125802060973854607667508011882267568402764873808900800530842521638480088265537279572527763624288660923616067565629543911677095001915898330229238955774055979207056770208399757003820338235282968934221437095086547128506770210235670418776763190654482110170379918285673805215053246401040193192956953268331622 36556408746463787647283291114860926084413826323975417331434236048369702899209317319855560955590864192980782669198910310936181985421958079062881820644235108707192257485969915113992379078661833478031287158013175864666970600816660558242592871154648216509709983408883311441271602215006472852599820626284218983903315950977073113838522988854157274942417491019423863187664036084886644310321834557183890672959568588214257812855069344050724095175516876437188197231118651365186333270059336126359640577335038523088705217626982898565060228333852801777246535752352869165095573855823735948174922865697264235706020909965539426748047857344444377027906644389172847633205817227611876561360167890871362131163526710133933874191746985120960174155658259035142224982293368618632585314179241305046091688155868339662942690390026928413114752446130829479006328954698902214804311094329442527936226008602543427388390619871852403255213365039241085741171761358361595544674241102035055481032109678589244247237183299614969715231782356450004560306100702155980392220392264655796593332021713202404108089398392228728950513946676310772066670151815602341071035026748525468559749558951651958536761376736909403873653366739774373625807219500731753314833571602901919383375427 2 b' 6 \xe1\x1c\xd8n\x1e\xeb\x97$ \xb3L\xf3=\xb5\xd3p\x12\xd5OM\xa6\x87qqb\xc5>\x92]5 g\xb4\xc2cS\xc6\x99\xb3\x9d\xa6\xd3\xdd\x1ci\xbd\xd6\xfd\xe9\xcc\xc7\xb4V-\x8c\xb8\x1c\xa7\x18b\x84F\xc2\xa9Cy\xd8\x83u\x0c_\xbf<\x96a{\x16M\xc8.\xab\x92\xb1\xa4\xf7cGN\x9c@ ,\xf7\xffrrV\x01\x03\x9e\x07\xe8Q\x7f\xa5D\xc6*~
解二元线性同余方程组 准备工作做完之后,先研究选项1的RSA加密: $$ x=(p,q) $$
$$ c_1\equiv y_1^{e_1}(\bmod n) $$
$$ c_2\equiv y_2^{e_2}(\bmod n) $$
而对于y1y2的生成,我在做的时候一开始把矩阵的运算搞错了,导致第一遍解解不出,可以用sage定义个变量算一下,当时打草纸验算应该是让矩阵右乘了,晕:
1 2 3 4 5 6 7 8 A = matrix([[13 ,11 ], [19 ,29 ],]) p,q=var('p q' ) x = vector([p,q]) y1,y2 = A*x print (y1,y2)
知道了y1y2之后,代入同余方程: $$ c_1\equiv (13p + 11q)^{e_1}(\bmod n) $$ $$ c_2\equiv (19p + 29q)^{e_2}(\bmod n) $$
这个二项式幂运算之后,中间含有pq乘积项的全部模掉了,只保留了最两边的项: $$ c_1\equiv (13p)^{e_1} + (11q)^{e_1}(\bmod n) $$ $$ c_2\equiv (19p)^{e_2} + (29q)^{e_2}(\bmod n) $$
pq为未知数,由于e1e2已知,所以可以把pq的e次方看做整体,但是现在两式这样有四个未知数,两个式子解四个未知数不行,但是两个未知数可以解,所以两式同时乘方处理一下,将四个未知数改成两个: $$ \begin{cases}c_1^{e_2}\equiv 13^{e_1e_2}p^{e_1e_2} + 11^{e_1e_2}q^{e_1e_2}(\bmod n)\\c_2^{e_1}\equiv 19^{e_1e_2}p^{e_1e_2} + 29^{e_1e_2}q^{e_1e_2}(\bmod n)\end{cases} $$ 前面的系数已知e都能求了,现在这就是个在模n下的二元线性同余方程组,百度找一下解的公式(太懒了懒得推了):
对于二元方程组: $$ \begin{cases}ax+by=m\\cx+dy=n\end{cases} $$ 有解: $$ \begin{cases}x=\frac{md-bn}{ad-bc}\\ y=\frac{mc-an}{bc-ad}\end{cases} $$ 所以把本题的所有值都量化进这个公式里,注意到由于是同余方程组,同余方程组对于除法有一定的限制,所以处理分数直接用逆元即可,由于结果是在模n上的,所以结果需要模n:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 import gmpy2N=[ 319921123311250552662963566647233721176500532097925505551548615965620926886290107004282962564396760204590468753354087637632596627283389303984969095543538774832852895025313854336617682706352197362418638206543073301189608132934178272448280700099991086560803792660780736921365654510536546191545903820825352164469145200595638053567489038365292280396297682441017231601120272720968293290636862864945870109310394015619502123336027505110147899564501295941242844401235448208551347533131793232155203435166720019251796222917958737174696093799200811639151889416773884099138368196585180556987089906154502751274251702921482591707082824826896528955613182269483843333285568738360741886640681092035773605438887662505159270796669448808076856295823895234264196954633882031001724935347719732441864407930514810976560093125404511952867209059623444494325114594996641049835394499590618767684304963563299049578241522328014002403690904185320105830639934733326227045308680083189915718559098864854510435072431091298351365139202359934453258210782585368099447241705559813727602307985927435898194839439434163080058496044725980779306785235534486901948642672517025391781421160093032191831056281446632496876808397979406212517252958889052537024809161355990518029929969 ,599110224308422610498885243404312429997177742018723070681626765267732786181152678750071483014346760950051734617610980049030890074185326986414140752740945426043572643718817292642671545022342097343164320475481125005511915062386511192750531215560323637471972117741700673604936286573301916241384756976273580685682913548756589981155428792124150225941178642113257150679698880071645553511181173883345101469622719344233722291848031318477750188110862073613213668753924645928575076145217645286278155576444910095487452856165516739845826060854104698626407038868953736697171989625407302305007912084794500759881256763408658774527496156696874315726095000344088043895258903767834768991583323537732703746682458050075635230240429775422444182740441361192690178542018467094016140059649350780667573179467800446685269685769332444562674125273351147969810077129441223813961453867316628820306319223876400075876373647814797515239817206564861314231194035802487996534734716180541499231064733286600825832248720133058267665225372986667999830641679212573884132642066093974917737361905234891402070297053289894322630861180118358700800642277403667514430348500006973280512066703404817926073682890049469420438004128393903376795534421609536502403618737354345776767809557 ,384998826819481882761848191143359204391153792102936797952487123431795928602128228587925293269182641167333316395663009756616057078812914618103709914853868671213075759006388222112859289793312785125519599636704794089696100330011788336290676549232518198379997908178761546709231733881624365460039160081054662380632396689836832546615865310275182804640492770868708692058413252519866099664032024736179195034707926990571556586839756024744587488152752561291138873158856991517081521016889242469285819552719905725580617648713215279020396226216541318638673492101090271474958210917505042292032944041085352664672037560206133336097289055143608958748235476744694786360538392614406079700804431378395467269765783246340309258568191256941214374291469991923243836682113882179730002144373914685785923439171546254291846453692663231157825191665781110039101517064225839961966881165888243102656766016651525006389085782969509941189752601844238960885306992131990050538920017436228174787367041358825007811717342276269001986620224870765641387156394784345759115202096559242992905646357564409484140096867391264765421036587476574846172385130923429202440439497574125845193100612292676551657321277120751650068237013326247682286358745901149134831233360299637481478476501 ,507245232253935808341536559251331701837149042018245019668938390550258643891056371194634189150221240155457817416421363647814996662621617987154459880940024087015512695828164012075638713135374561699637353865381550036798462896607057683996864793778246319726533085915823440503386062570616735640817366048926965475520405031088255626435556375118364904199343749626096845737830245083121927192440465061149995552046837833655802716107749310515199355826503474221188405390489548162218224078084930458858844022022203284778087366338961303096801879481188705227078317196089916431962827446006365294990445055140495563290653579866892084838798684512066717774937577495068990501882865117535740192140050077440367096171641020261519561740232716507034084869012311774817541750130260940359846263173411914427496187682304043909136422023155688402393218661215002088157756621995273150568685973008999888016136364741781537185135514968218047327827360747635729718588277278127875340312839143652808925545634557874389933187090989855613050361001333248189225142340998930410951347842736412211513706668693633697675716280682959923184620261330324601504956687173647392045782974315575577535746568626528305515290788891435427759726584517509669935697997687347132761440317609787903713772833 ,75854144701123527418530520540977973114878453670553534643882219139491306909566751873750088176758684406436763229689376208407654442423255987090092395561042196383263162614865941727286943944745838052909841040506558873374230692573883334829385258214209222741721762230873266837628111684878771035789992785928300972636174142008029210264139228479951126872954369317657960423521963247660759233472768720444568215447251655176638426038985154193450561951816088995111813541660720177003733108376803395757709839771329616920135924277014003893558451863445470200895348470550668369618940621168047082007338039930373702266500734062873406094876687795832254523678271245825888065478094110511855190455844712670793471844450310564737613914997090950777618290642586363118592128104505864959053007490232765809998928156931039879283271663032882671695655080563521554598143954434024975211054267751406687119778148675259865111763405130922970467957254060273774851666343187015289979493015079684632598195423790807537053192669844475177043837267953013535247975192331371568028242008149496566482991252297048372190860668946369071350187804162802690175670871752785725929028598825704746328553329263200182801618773131210391323623123571074275034668806644923614133111322181107531343085387 ] C1=[ 248292875804004341487193963587418460793015860983343659729627383649600562154259358584129320729975693092182850315023754970095027674177520062160081385829489999398851656460396267064471651504991787753897600165464399162714333725852108264765404549646356689169774328016897055213513659098660700163238808314499831273389824485995857140645954536717894810800060744488273316547697541161681415958432943782338051016988235483006770823488933136897020554203178244197502012795053551048100276519840224992613689013732623028934965584811831143911305441779886260797220241977972033615990028418358826359968343897398821106856094954413945798907918678293183082235577560119112547038959525148322763823839046696386613319994738999783947199590531544768775692808847538511358347345961677089604593395682205308621002457663787631613273274022455500740217424160275888894292062475958187405993289602952730106121166185714356643453390540638758319675521881312024226126409644961686094789094555539949200025541322509192008502810890673721136882951683534363469649407225558267779718952546008673217922105075461128591140566706367413899119360441045405844432445235817784608668283513141813047885521529347709023277444323912888989918220180834119379811483872772135494735140660228469428830964530 ,176931389707528532333643293274655713467866080265053285136083463468262516271121733861463524578770503903299476192462414217588405103808830287418952647224740674444215065272324677390543276613816896053074302438652440655659641657537193059597393638416182901134595550137990263713298057951419194342430107780930999038188587153994124570186567704205312650035672893717801156504083484824727347400152678323131659525133752194372791942803899593097694860937464143593457219248740023332020372072436505120470558928852088434764645410055511263334761560328097444749789959966376288430211336459557555092046090064609896642870596113288694780225634647867281210671117808505871363263226868334708852922005728999508478078595523108156621337361245586806939274383146616685906803790102031200753657833809494074618641106092244627257806217431922190455598898638812355858202024312198560056114954424987895506430303657593394391539732055591630532027063746485277742767328761858501447181667397420384446040681677602749514035730844334140735074282955968546966184623952444350809497205207100479517975199861131974671098056262855687103144442821719415871807018371037443387516644803223973850308829061960130368378893261176986431944217973608429502911805758922786547560778452649318154612861967 ,263412959517528061532217746494794166082281553294199674428880147566246392753433764409953717919033289918824130484554076531357124324259498287499308866073220118826317609200284908288861969777215595841788765768992142011859613032976380802799562284652189395740386141224142260554976714706959099938813238493527211646768966072650649975671968174558189981715133171111486170067853989114337687853470560553517486354345050390387023851238181351095655806518004184932302016785690637561739925436741947888687661210178752387715595895021756008188472827201005709762448457715023486287232182254910421892998725128850133130650731062190401584089260857064324303526505680880583681332678447312646319534097554377495547408990027316588003909189937934533078846641447285404727313766068726950684894154368494881686483287672487479510050747957229496328638768715372506730837466648041842900978823550603103981055081374871877726693269296223748736317192577870785252905659796624463797774864114025525725228963680130973220639435350168518740097315345932723631297793189729156242238540526331759878310860878056060933673445786292478116901951419570480091573958293874614303092653905723270744036932717042344970542962385957902035661776041125118772704377131246174272394870998129203448444725457 ,124638905226754098806817101032457294027818026677971494020638032730715562312579631139751218085640891949824822961987590218693524984007767250952367221316577733970586428863363878927365121159858236201167468626199615437062864556583857137289152391101677883335117179636284725331078154446512795545548931320054604998696082561634212484005423084065746123675833928694573342777178903003218928956661006433506308115777403479769915801463593189394473925162998131129243252794347652208444796343551190165683495708053585943387165983026025225586503213521312728373798714099368812992550361456831878231181647979530725168365995127709512315425979943920184175875442833726779334700048052511922581466302999698402150250186533257302131814434773611410298304884512272663506831636174410056656041397953118791283468037077063062708252083364173645585027774359881969362081243862169106816969337560807708649492829423385487494334863325503464356219720923038079727910572046592552101622371785835982457894422429358259579858598897194842634038228873614534636634007653502390072087089687058833448985840998420852204735268996943085994666303766339029914202026076638444002681704238375403865888266480808789084663776141406753983837131363745790160009558260880255569728540795480657163657953946 ,18582470997758640686236228908085341038225622737681493954917063804738618898712419270474742101006315492643318433628598836816813533694824248045884321325595355841890943617828532403616000912577086644372202645330628765396827331380955730706619925614732897050719845498551519550042822486465698195700395659904399923479294949397360252564375164859658616041418783814270575835086070762241270955845077325769080603136408519397135675438167569509930641059447928283246362575761844787578057228391227525081316282399980870403873890449190699742629249363843763135077397266696525295092990498552303934211282420029219947701605216360988122204256860869270689055525413147030046394542537903178052990908980917559477900583662402097831568581585052609194631770523816521340882539563826686094386375094443448598008561338600827387911487385354500338504586485019285499176828964556777072527901936660378309368240614930466339417396968133120970452985733610014213518831608075125802060973854607667508011882267568402764873808900800530842521638480088265537279572527763624288660923616067565629543911677095001915898330229238955774055979207056770208399757003820338235282968934221437095086547128506770210235670418776763190654482110170379918285673805215053246401040193192956953268331622 ] C2=[ 296180744100107627758305803516955340735558610309703831618835666444138490117343532242009220325303295510764934839650890329415913083510508318219183867155229006613035882800097723061091284831633060962879325372568115856456841602547580917291722852871793433471643367474974123185317625795292746401531802938675718785468748265718598756597678742309285333084753463463911170855807120117785391014177340178847064198532628205532901940135177816329079615728225052445221533435398969165247298426483478788736418651645495975740824617906545979330594372548117600367071940846614291762730294798674263510602807627691374990413772565733031188485081012803619040113850825410586940777678530030755343410465305025316354508831191088580419179330492687487852916636844333217073647477740970328528182474872923076646152213713921452837288812643386947407603759919404325424354630405612235758684539078304413046133956422960652314198670078399947591407271051787044259051554945886192870328524690468787651125309448228277503786656782815364975714286271137126118656004127038041167492890493455265764937552969782098992644454795704577084669939924649658297313008791286459600996857834780090659852975185140737006153546204113199194069050763512604482342589174038583411788997367584415563743340790 ,207825535879623865503097506381310741807898563342999422545658227690482860570590516383855935273188527718395578010504901652766942519822324143510275994937930872623748070639611098588454967901146797122950194632033675562625783763405679992217014873537762961389175695619305119730391390356873938973446359987881369521735928896421165165050426604099270352684944316840363736268429526864889718104018006472013834578999658151840662269815703540065548283955329961781918836244179184012652332665537289529366969067032441841608013817519301029589854737293888059968854497590399682532480192708166880928264360458819249385985000132745990937500956684132997265337340990054223510325085325876943187026146893100295481827820789579613628373021305786762272014306651642062049190186870382876032234837379443353344294059752180789659187717099411362684483418311653654534993658405246985723278808212555344671100837992053963688157637616963241685755348784040248979693639307270954751360300904564908809513136996918206562709964367755857169510548126386207318744970653803079758998769906758394220917327699200076235635461400456496200309572279548621825633543713359900504179332751555630351786079010244112977343569035465586377711479592257479060619330888392439487337503238360580548529118774 ,379141106506112115015622970987612647085791358706332228662782435574383644676152728354901732525171316822080494398925057112244202125081035390441248680561723571333542354357533545503976082670155532027042252094502311476538022286377130159789512873129175565554261137462364776243241919928277766680994345146728975502967017499701417224964087080949167650105441912270149179803259414150473042807136414890312876902363747748668355388769973433905232133239745960886638184079596160490921229840436293043438908796367159430939249778899061028907959673137331957622949868497019067787519906919985945944030095789832143522630084187060738458996618923101199548583721210230171193521188080450859417547063660379782992717082989353180071369686174809343601715811054580233823428833882027715672990671564114924057482648920909420857280646240681251922428786226530645228543301278988185748803982479105788150494880973738178008614500089746956457868272279069731491447479881552976484627779476305213007190643556674347291191236876757632291557039643125132398701129213344780986150303277782898113196403386247175084953623350120919113636506905440280334789880530385758785840713823113405103518810269832345160384661926888648035985189080612407421214999677760298747251058236414655245095652118 ,240874010959668572995066513021604834764425643168141336894751714170296379975601634819243224391219902974304208195520659715789892844864738149125965473223544126222013293617461267503458636090904173180107731144768965660013134268114307083405057958491695370283309157490331842423852627395173777572162434426061609818108992902161232015774852198644380599273195910771743171014623866805104568008513252647009041342172177979593802063541085021499402512275261687814491161889425621836508791077467516208035467145268972515958642850076780236306042263622373425617254539706702530330405735315726694484094775104562223077864142620431567761301838030348639899377905928432490666515339610677294311293479799667949121649960116150972134318394444739737272007852466589632871830703701132556614595722322861845953059129079861248033694808791728994607709310890273990485928972362823137452455159402426525721873635741495732972480271703895019278619443851067282718022260194750835579691315723727049269118671182042116905641098827646351397474435913964966466682503360896184533601267594244407375573099196467997005589139020291661910118149590407846330309321371481613870685679721311438357073570062809730718699957486858818038505720111013693243248156523750763299063756297514168747750465364 ,36556408746463787647283291114860926084413826323975417331434236048369702899209317319855560955590864192980782669198910310936181985421958079062881820644235108707192257485969915113992379078661833478031287158013175864666970600816660558242592871154648216509709983408883311441271602215006472852599820626284218983903315950977073113838522988854157274942417491019423863187664036084886644310321834557183890672959568588214257812855069344050724095175516876437188197231118651365186333270059336126359640577335038523088705217626982898565060228333852801777246535752352869165095573855823735948174922865697264235706020909965539426748047857344444377027906644389172847633205817227611876561360167890871362131163526710133933874191746985120960174155658259035142224982293368618632585314179241305046091688155868339662942690390026928413114752446130829479006328954698902214804311094329442527936226008602543427388390619871852403255213365039241085741171761358361595544674241102035055481032109678589244247237183299614969715231782356450004560306100702155980392220392264655796593332021713202404108089398392228728950513946676310772066670151815602341071035026748525468559749558951651958536761376736909403873653366739774373625807219500731753314833571602901919383375427 ] e1,e2 = 6163 ,7411 for i in range (5 ): n,c1,c2=N[i],C1[i],C2[i] c1,c2=pow (c1,e2,n),pow (c2,e1,n) a=pow (13 ,e1*e2,n) b=pow (11 ,e1*e2,n) c=pow (19 ,e1*e2,n) d=pow (29 ,e1*e2,n) p.<x,y>=PolynomialRing(Zmod(n)) x=((c1*d-b*c2)*gmpy2.invert(gmpy2.mpz(a*d-b*c),n))%n y=((c1*c-a*c2)*gmpy2.invert(gmpy2.mpz(b*c-a*d),n))%n
得到的xy为在模n下的$p^{e_1e_2},q^{e_1e_2}$,可以直接求公因子进行因式分解,得到最开始生成的随机数pq注意后32位无效位可以先去掉,避免等会忘了:
这里为了保证pq的顺序,应该先p后q存入数组方便后续进行随机数预测,原题目还返回了一个signal值判断p>q,现在看似乎是混淆信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 import gmpy2N=[ 319921123311250552662963566647233721176500532097925505551548615965620926886290107004282962564396760204590468753354087637632596627283389303984969095543538774832852895025313854336617682706352197362418638206543073301189608132934178272448280700099991086560803792660780736921365654510536546191545903820825352164469145200595638053567489038365292280396297682441017231601120272720968293290636862864945870109310394015619502123336027505110147899564501295941242844401235448208551347533131793232155203435166720019251796222917958737174696093799200811639151889416773884099138368196585180556987089906154502751274251702921482591707082824826896528955613182269483843333285568738360741886640681092035773605438887662505159270796669448808076856295823895234264196954633882031001724935347719732441864407930514810976560093125404511952867209059623444494325114594996641049835394499590618767684304963563299049578241522328014002403690904185320105830639934733326227045308680083189915718559098864854510435072431091298351365139202359934453258210782585368099447241705559813727602307985927435898194839439434163080058496044725980779306785235534486901948642672517025391781421160093032191831056281446632496876808397979406212517252958889052537024809161355990518029929969 ,599110224308422610498885243404312429997177742018723070681626765267732786181152678750071483014346760950051734617610980049030890074185326986414140752740945426043572643718817292642671545022342097343164320475481125005511915062386511192750531215560323637471972117741700673604936286573301916241384756976273580685682913548756589981155428792124150225941178642113257150679698880071645553511181173883345101469622719344233722291848031318477750188110862073613213668753924645928575076145217645286278155576444910095487452856165516739845826060854104698626407038868953736697171989625407302305007912084794500759881256763408658774527496156696874315726095000344088043895258903767834768991583323537732703746682458050075635230240429775422444182740441361192690178542018467094016140059649350780667573179467800446685269685769332444562674125273351147969810077129441223813961453867316628820306319223876400075876373647814797515239817206564861314231194035802487996534734716180541499231064733286600825832248720133058267665225372986667999830641679212573884132642066093974917737361905234891402070297053289894322630861180118358700800642277403667514430348500006973280512066703404817926073682890049469420438004128393903376795534421609536502403618737354345776767809557 ,384998826819481882761848191143359204391153792102936797952487123431795928602128228587925293269182641167333316395663009756616057078812914618103709914853868671213075759006388222112859289793312785125519599636704794089696100330011788336290676549232518198379997908178761546709231733881624365460039160081054662380632396689836832546615865310275182804640492770868708692058413252519866099664032024736179195034707926990571556586839756024744587488152752561291138873158856991517081521016889242469285819552719905725580617648713215279020396226216541318638673492101090271474958210917505042292032944041085352664672037560206133336097289055143608958748235476744694786360538392614406079700804431378395467269765783246340309258568191256941214374291469991923243836682113882179730002144373914685785923439171546254291846453692663231157825191665781110039101517064225839961966881165888243102656766016651525006389085782969509941189752601844238960885306992131990050538920017436228174787367041358825007811717342276269001986620224870765641387156394784345759115202096559242992905646357564409484140096867391264765421036587476574846172385130923429202440439497574125845193100612292676551657321277120751650068237013326247682286358745901149134831233360299637481478476501 ,507245232253935808341536559251331701837149042018245019668938390550258643891056371194634189150221240155457817416421363647814996662621617987154459880940024087015512695828164012075638713135374561699637353865381550036798462896607057683996864793778246319726533085915823440503386062570616735640817366048926965475520405031088255626435556375118364904199343749626096845737830245083121927192440465061149995552046837833655802716107749310515199355826503474221188405390489548162218224078084930458858844022022203284778087366338961303096801879481188705227078317196089916431962827446006365294990445055140495563290653579866892084838798684512066717774937577495068990501882865117535740192140050077440367096171641020261519561740232716507034084869012311774817541750130260940359846263173411914427496187682304043909136422023155688402393218661215002088157756621995273150568685973008999888016136364741781537185135514968218047327827360747635729718588277278127875340312839143652808925545634557874389933187090989855613050361001333248189225142340998930410951347842736412211513706668693633697675716280682959923184620261330324601504956687173647392045782974315575577535746568626528305515290788891435427759726584517509669935697997687347132761440317609787903713772833 ,75854144701123527418530520540977973114878453670553534643882219139491306909566751873750088176758684406436763229689376208407654442423255987090092395561042196383263162614865941727286943944745838052909841040506558873374230692573883334829385258214209222741721762230873266837628111684878771035789992785928300972636174142008029210264139228479951126872954369317657960423521963247660759233472768720444568215447251655176638426038985154193450561951816088995111813541660720177003733108376803395757709839771329616920135924277014003893558451863445470200895348470550668369618940621168047082007338039930373702266500734062873406094876687795832254523678271245825888065478094110511855190455844712670793471844450310564737613914997090950777618290642586363118592128104505864959053007490232765809998928156931039879283271663032882671695655080563521554598143954434024975211054267751406687119778148675259865111763405130922970467957254060273774851666343187015289979493015079684632598195423790807537053192669844475177043837267953013535247975192331371568028242008149496566482991252297048372190860668946369071350187804162802690175670871752785725929028598825704746328553329263200182801618773131210391323623123571074275034668806644923614133111322181107531343085387 ] C1=[ 248292875804004341487193963587418460793015860983343659729627383649600562154259358584129320729975693092182850315023754970095027674177520062160081385829489999398851656460396267064471651504991787753897600165464399162714333725852108264765404549646356689169774328016897055213513659098660700163238808314499831273389824485995857140645954536717894810800060744488273316547697541161681415958432943782338051016988235483006770823488933136897020554203178244197502012795053551048100276519840224992613689013732623028934965584811831143911305441779886260797220241977972033615990028418358826359968343897398821106856094954413945798907918678293183082235577560119112547038959525148322763823839046696386613319994738999783947199590531544768775692808847538511358347345961677089604593395682205308621002457663787631613273274022455500740217424160275888894292062475958187405993289602952730106121166185714356643453390540638758319675521881312024226126409644961686094789094555539949200025541322509192008502810890673721136882951683534363469649407225558267779718952546008673217922105075461128591140566706367413899119360441045405844432445235817784608668283513141813047885521529347709023277444323912888989918220180834119379811483872772135494735140660228469428830964530 ,176931389707528532333643293274655713467866080265053285136083463468262516271121733861463524578770503903299476192462414217588405103808830287418952647224740674444215065272324677390543276613816896053074302438652440655659641657537193059597393638416182901134595550137990263713298057951419194342430107780930999038188587153994124570186567704205312650035672893717801156504083484824727347400152678323131659525133752194372791942803899593097694860937464143593457219248740023332020372072436505120470558928852088434764645410055511263334761560328097444749789959966376288430211336459557555092046090064609896642870596113288694780225634647867281210671117808505871363263226868334708852922005728999508478078595523108156621337361245586806939274383146616685906803790102031200753657833809494074618641106092244627257806217431922190455598898638812355858202024312198560056114954424987895506430303657593394391539732055591630532027063746485277742767328761858501447181667397420384446040681677602749514035730844334140735074282955968546966184623952444350809497205207100479517975199861131974671098056262855687103144442821719415871807018371037443387516644803223973850308829061960130368378893261176986431944217973608429502911805758922786547560778452649318154612861967 ,263412959517528061532217746494794166082281553294199674428880147566246392753433764409953717919033289918824130484554076531357124324259498287499308866073220118826317609200284908288861969777215595841788765768992142011859613032976380802799562284652189395740386141224142260554976714706959099938813238493527211646768966072650649975671968174558189981715133171111486170067853989114337687853470560553517486354345050390387023851238181351095655806518004184932302016785690637561739925436741947888687661210178752387715595895021756008188472827201005709762448457715023486287232182254910421892998725128850133130650731062190401584089260857064324303526505680880583681332678447312646319534097554377495547408990027316588003909189937934533078846641447285404727313766068726950684894154368494881686483287672487479510050747957229496328638768715372506730837466648041842900978823550603103981055081374871877726693269296223748736317192577870785252905659796624463797774864114025525725228963680130973220639435350168518740097315345932723631297793189729156242238540526331759878310860878056060933673445786292478116901951419570480091573958293874614303092653905723270744036932717042344970542962385957902035661776041125118772704377131246174272394870998129203448444725457 ,124638905226754098806817101032457294027818026677971494020638032730715562312579631139751218085640891949824822961987590218693524984007767250952367221316577733970586428863363878927365121159858236201167468626199615437062864556583857137289152391101677883335117179636284725331078154446512795545548931320054604998696082561634212484005423084065746123675833928694573342777178903003218928956661006433506308115777403479769915801463593189394473925162998131129243252794347652208444796343551190165683495708053585943387165983026025225586503213521312728373798714099368812992550361456831878231181647979530725168365995127709512315425979943920184175875442833726779334700048052511922581466302999698402150250186533257302131814434773611410298304884512272663506831636174410056656041397953118791283468037077063062708252083364173645585027774359881969362081243862169106816969337560807708649492829423385487494334863325503464356219720923038079727910572046592552101622371785835982457894422429358259579858598897194842634038228873614534636634007653502390072087089687058833448985840998420852204735268996943085994666303766339029914202026076638444002681704238375403865888266480808789084663776141406753983837131363745790160009558260880255569728540795480657163657953946 ,18582470997758640686236228908085341038225622737681493954917063804738618898712419270474742101006315492643318433628598836816813533694824248045884321325595355841890943617828532403616000912577086644372202645330628765396827331380955730706619925614732897050719845498551519550042822486465698195700395659904399923479294949397360252564375164859658616041418783814270575835086070762241270955845077325769080603136408519397135675438167569509930641059447928283246362575761844787578057228391227525081316282399980870403873890449190699742629249363843763135077397266696525295092990498552303934211282420029219947701605216360988122204256860869270689055525413147030046394542537903178052990908980917559477900583662402097831568581585052609194631770523816521340882539563826686094386375094443448598008561338600827387911487385354500338504586485019285499176828964556777072527901936660378309368240614930466339417396968133120970452985733610014213518831608075125802060973854607667508011882267568402764873808900800530842521638480088265537279572527763624288660923616067565629543911677095001915898330229238955774055979207056770208399757003820338235282968934221437095086547128506770210235670418776763190654482110170379918285673805215053246401040193192956953268331622 ] C2=[ 296180744100107627758305803516955340735558610309703831618835666444138490117343532242009220325303295510764934839650890329415913083510508318219183867155229006613035882800097723061091284831633060962879325372568115856456841602547580917291722852871793433471643367474974123185317625795292746401531802938675718785468748265718598756597678742309285333084753463463911170855807120117785391014177340178847064198532628205532901940135177816329079615728225052445221533435398969165247298426483478788736418651645495975740824617906545979330594372548117600367071940846614291762730294798674263510602807627691374990413772565733031188485081012803619040113850825410586940777678530030755343410465305025316354508831191088580419179330492687487852916636844333217073647477740970328528182474872923076646152213713921452837288812643386947407603759919404325424354630405612235758684539078304413046133956422960652314198670078399947591407271051787044259051554945886192870328524690468787651125309448228277503786656782815364975714286271137126118656004127038041167492890493455265764937552969782098992644454795704577084669939924649658297313008791286459600996857834780090659852975185140737006153546204113199194069050763512604482342589174038583411788997367584415563743340790 ,207825535879623865503097506381310741807898563342999422545658227690482860570590516383855935273188527718395578010504901652766942519822324143510275994937930872623748070639611098588454967901146797122950194632033675562625783763405679992217014873537762961389175695619305119730391390356873938973446359987881369521735928896421165165050426604099270352684944316840363736268429526864889718104018006472013834578999658151840662269815703540065548283955329961781918836244179184012652332665537289529366969067032441841608013817519301029589854737293888059968854497590399682532480192708166880928264360458819249385985000132745990937500956684132997265337340990054223510325085325876943187026146893100295481827820789579613628373021305786762272014306651642062049190186870382876032234837379443353344294059752180789659187717099411362684483418311653654534993658405246985723278808212555344671100837992053963688157637616963241685755348784040248979693639307270954751360300904564908809513136996918206562709964367755857169510548126386207318744970653803079758998769906758394220917327699200076235635461400456496200309572279548621825633543713359900504179332751555630351786079010244112977343569035465586377711479592257479060619330888392439487337503238360580548529118774 ,379141106506112115015622970987612647085791358706332228662782435574383644676152728354901732525171316822080494398925057112244202125081035390441248680561723571333542354357533545503976082670155532027042252094502311476538022286377130159789512873129175565554261137462364776243241919928277766680994345146728975502967017499701417224964087080949167650105441912270149179803259414150473042807136414890312876902363747748668355388769973433905232133239745960886638184079596160490921229840436293043438908796367159430939249778899061028907959673137331957622949868497019067787519906919985945944030095789832143522630084187060738458996618923101199548583721210230171193521188080450859417547063660379782992717082989353180071369686174809343601715811054580233823428833882027715672990671564114924057482648920909420857280646240681251922428786226530645228543301278988185748803982479105788150494880973738178008614500089746956457868272279069731491447479881552976484627779476305213007190643556674347291191236876757632291557039643125132398701129213344780986150303277782898113196403386247175084953623350120919113636506905440280334789880530385758785840713823113405103518810269832345160384661926888648035985189080612407421214999677760298747251058236414655245095652118 ,240874010959668572995066513021604834764425643168141336894751714170296379975601634819243224391219902974304208195520659715789892844864738149125965473223544126222013293617461267503458636090904173180107731144768965660013134268114307083405057958491695370283309157490331842423852627395173777572162434426061609818108992902161232015774852198644380599273195910771743171014623866805104568008513252647009041342172177979593802063541085021499402512275261687814491161889425621836508791077467516208035467145268972515958642850076780236306042263622373425617254539706702530330405735315726694484094775104562223077864142620431567761301838030348639899377905928432490666515339610677294311293479799667949121649960116150972134318394444739737272007852466589632871830703701132556614595722322861845953059129079861248033694808791728994607709310890273990485928972362823137452455159402426525721873635741495732972480271703895019278619443851067282718022260194750835579691315723727049269118671182042116905641098827646351397474435913964966466682503360896184533601267594244407375573099196467997005589139020291661910118149590407846330309321371481613870685679721311438357073570062809730718699957486858818038505720111013693243248156523750763299063756297514168747750465364 ,36556408746463787647283291114860926084413826323975417331434236048369702899209317319855560955590864192980782669198910310936181985421958079062881820644235108707192257485969915113992379078661833478031287158013175864666970600816660558242592871154648216509709983408883311441271602215006472852599820626284218983903315950977073113838522988854157274942417491019423863187664036084886644310321834557183890672959568588214257812855069344050724095175516876437188197231118651365186333270059336126359640577335038523088705217626982898565060228333852801777246535752352869165095573855823735948174922865697264235706020909965539426748047857344444377027906644389172847633205817227611876561360167890871362131163526710133933874191746985120960174155658259035142224982293368618632585314179241305046091688155868339662942690390026928413114752446130829479006328954698902214804311094329442527936226008602543427388390619871852403255213365039241085741171761358361595544674241102035055481032109678589244247237183299614969715231782356450004560306100702155980392220392264655796593332021713202404108089398392228728950513946676310772066670151815602341071035026748525468559749558951651958536761376736909403873653366739774373625807219500731753314833571602901919383375427 ] list =[]e1,e2 = 6163 ,7411 e=0x10001 for i in range (5 ): n,c1,c2=N[i],C1[i],C2[i] c1,c2=pow (c1,e2,n),pow (c2,e1,n) a=pow (13 ,e1*e2,n) b=pow (11 ,e1*e2,n) c=pow (19 ,e1*e2,n) d=pow (29 ,e1*e2,n) x=((c1*d-b*c2)*gmpy2.invert(gmpy2.mpz(a*d-b*c),n))%n y=((c1*c-a*c2)*gmpy2.invert(gmpy2.mpz(b*c-a*d),n))%n p=gmpy2.gcd(gmpy2.mpz(x),gmpy2.mpz(n)) q=(n//p)>>32 p=p>>32 list .append(int (p)) list .append(int (q)) print (list )
MT19937预测 得到了五组处理后的pq随机数,下面进行随机数预测。
一开始我用了randcrack库进行预测,需要先把pq分解出63个随机数然后取后624个随机数提交预测:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 from randcrack import RandCrackimport gmpy2list =[3600265381355011800604369729661573963612710583856212506545658333074852429990600726314135674548759570858351262908012949282212891542519305106962751727007362149708469686819748050996483865271557123237235648703377421566137839034113010750191629064356634517368870402690058113717875558312794512374974885601202863799749046561385365768063498784814448786640372932810512239460911099581866725281270129457067796775074394695587754248229141673874819102350216092845573296781783861707029124711116336816170035789910773422844025959034069644139823743187425115167175093301548318030822470998819584829825906212545143905770241396368 , 4817133463471453198428421724055510657300236861968071382969324879726323848060330555371547119808753420047534779374579128185549253172742713334594545998949652767249840813701426174426518547280870584064238611099900203404065005465511964677141340532671932434023046148664909131354411362314994560484009837116140892946013884868181058158225451545677966491404463355910291955883702634244436917274121422968501861212369587093053816220793024776593440099061813499603413938552891122263176441219237760895847492692282759544436521394939331277943772962636951401825442292010598866502339863473831351796439464211956633336140714936091 , 5320985707957182464040016394767710336981155975260726958323250923521354629117853764934556740947855596798863238401760126048848459985182048990865607049236087766457632811795814296090981304235470780746115486653453233629654840725302888729555750551634791327737624021914530218194896080743108937438723209634695487781051652819143405638999309562786198289918933798259419294897022898320243694222932439360673535068138044883752460243760791362190060387472043568148435580879715644013128735121643766648176565421872828379995558920914383623712812039193491820705844857517386299044583692230500293902134456103817887941918137670476 , 6103724407510629902108247826148113166486441306090215047925636496596244026431075146089318097310457535274545145720087483352023263429259853031395440800707590279250812628751259981104988389130473778474422554471991638062721194954559286056509663416143268183106221134570350825574093156385007706993953846837310675668273336245684705824074684533975599446369202277889983471718721612625780600896262842621115391081844839614819550798593632699449553122181971701082078292484491250676416128435898685973887339369321495919025223496171602845899319026056945842903604676049073160779149208311182579527170884638290725668737779393295 , 4869952293485307201849272034040709529173145583179893663678794036912765707481488928691048416481685293644454346754026194189471394243420189635244241971617405219211600574534934416803366472721950176394073491033943471502102861891549695312488491782258470680771475748815344888320267529711937062436449859623328312832801208512387507383929100722015207891279245089052514428882052674399575458791619778703599539124366156305525344914435281805520385759704242333183054601193188696526631006422498353677164131887595128324852413268542447360634055039317080283700647542464128697047944776564629428419660592398742380439552234852792 , 4285632992754820150722119126482059603267423755331360028619749952541858328581118679369849121044325280796994891397111220877798027444951860158453235210630805079844816773804421837113424171851171976359484628498874866924424398454233437952901025012211593258761248604409143201629679222686633593211289120293853353030289988193401376986399585011496182072908570769332510733651794324562258036980781567190606205973835714060131764319664288798714340741293275917472294478304013955046434808568768542848882878382183636989281256602389408475343914392096292108626471238918229714731498007494271904546308577038076210571781147001419 , 7173054866684378506127542172995536857120071023414954611535911778323161990600202047335812665236784695821980802955007050498160452829335477036119094303084915004277044629605907318407566397947664875330421853665929397509331583528834929255899450417904186939731193700897256466874521689876651920775127696250029782179636421293187877495167406739363993300464326043851435232800170688751911040563657868691602313438006658399905588477903008432737611309689920219111154889672094733947549930020772196936809370758645952282470566570267239081126094098804731799692246636833036294225587427647304535913226512570873761776688206348639 , 3833487914242313378819434108513688065627053691673983399608816921037602279374665152466695797123518267472832291732929809630714718230349407600852873072577454103567815651064683889858737858018988859887176799209107555610438029038043054702761434525520274938268708893703912968012456019114312059390879789473695971924061681499028042066517835303765320298462149699451255600608805120538746592023873172054049004171036273586873464146373622260020112654077623486675212766201276689676571210051907878213084583848695347494156467728525890779923873668537276542348558358575241654156832473179828811659942819978821509757832704754102 , 884227670301398205806036237885673489794589850916644991891316845355535910849089165148992511580569462415839175544365378399036605530483114930797785738701486865318815579925386056940082723247786053203405513311413178004668290711216587279976585956250945661068384229033276896637767269133468294453361946807302113316626996610774665370812483815977665776730496695745394936570558772561143550268132809202487575906268004922083529768692530533859783390704320143874455669268023976446372139379522701512501394589897184977389430053743420453631029844597271734806480741536979368531348102390185496618858890658761515126456780417806 , 4650455490097655733832976488186981781238392107709968153352076282056842201764978521727907715782183489476319465552057260508930486914669731797157749432557079029041275092304723059583215482390327108225429675695013416156981588697480833307299663208604124180200503283285180334391844471906737604676557044887200881064774900407043728813855022543758024084817381712776718182436736938987065511700086314031431391661790894563388470040282287566233461568242932038165013498642883061075598932213704092468246869085189344221886205865611423386220335789711983635779742200439278570653010650269085339842540595107623433736216721309357 ]num1,num=[],[] for i in list : num1.append(str ('0' *(2016 -len (bin (i)[2 :]))+bin (i)[2 :])) for i in num1: for j in range (1984 ,-1 ,-32 ): num.append(int (i[j:j+32 ],2 )) r = RandCrack() for i in range (6 ,630 ): r.submit(num[i]) p,q = gmpy2.next_prime(r.predict_getrandbits(2016 )<<32 ),gmpy2.next_prime(r.predict_getrandbits(2016 )<<32 )
学长嫌这样有点麻烦怕错了,让我用之前分享在群里的一个预测的库,这个库的提交随机数可以直接提交大数,不需要分解:
1 2 3 4 5 6 7 8 9 10 from extend_mt19937_predictor import ExtendMT19937Predictorimport gmpy2list =[3600265381355011800604369729661573963612710583856212506545658333074852429990600726314135674548759570858351262908012949282212891542519305106962751727007362149708469686819748050996483865271557123237235648703377421566137839034113010750191629064356634517368870402690058113717875558312794512374974885601202863799749046561385365768063498784814448786640372932810512239460911099581866725281270129457067796775074394695587754248229141673874819102350216092845573296781783861707029124711116336816170035789910773422844025959034069644139823743187425115167175093301548318030822470998819584829825906212545143905770241396368 , 4817133463471453198428421724055510657300236861968071382969324879726323848060330555371547119808753420047534779374579128185549253172742713334594545998949652767249840813701426174426518547280870584064238611099900203404065005465511964677141340532671932434023046148664909131354411362314994560484009837116140892946013884868181058158225451545677966491404463355910291955883702634244436917274121422968501861212369587093053816220793024776593440099061813499603413938552891122263176441219237760895847492692282759544436521394939331277943772962636951401825442292010598866502339863473831351796439464211956633336140714936091 , 5320985707957182464040016394767710336981155975260726958323250923521354629117853764934556740947855596798863238401760126048848459985182048990865607049236087766457632811795814296090981304235470780746115486653453233629654840725302888729555750551634791327737624021914530218194896080743108937438723209634695487781051652819143405638999309562786198289918933798259419294897022898320243694222932439360673535068138044883752460243760791362190060387472043568148435580879715644013128735121643766648176565421872828379995558920914383623712812039193491820705844857517386299044583692230500293902134456103817887941918137670476 , 6103724407510629902108247826148113166486441306090215047925636496596244026431075146089318097310457535274545145720087483352023263429259853031395440800707590279250812628751259981104988389130473778474422554471991638062721194954559286056509663416143268183106221134570350825574093156385007706993953846837310675668273336245684705824074684533975599446369202277889983471718721612625780600896262842621115391081844839614819550798593632699449553122181971701082078292484491250676416128435898685973887339369321495919025223496171602845899319026056945842903604676049073160779149208311182579527170884638290725668737779393295 , 4869952293485307201849272034040709529173145583179893663678794036912765707481488928691048416481685293644454346754026194189471394243420189635244241971617405219211600574534934416803366472721950176394073491033943471502102861891549695312488491782258470680771475748815344888320267529711937062436449859623328312832801208512387507383929100722015207891279245089052514428882052674399575458791619778703599539124366156305525344914435281805520385759704242333183054601193188696526631006422498353677164131887595128324852413268542447360634055039317080283700647542464128697047944776564629428419660592398742380439552234852792 , 4285632992754820150722119126482059603267423755331360028619749952541858328581118679369849121044325280796994891397111220877798027444951860158453235210630805079844816773804421837113424171851171976359484628498874866924424398454233437952901025012211593258761248604409143201629679222686633593211289120293853353030289988193401376986399585011496182072908570769332510733651794324562258036980781567190606205973835714060131764319664288798714340741293275917472294478304013955046434808568768542848882878382183636989281256602389408475343914392096292108626471238918229714731498007494271904546308577038076210571781147001419 , 7173054866684378506127542172995536857120071023414954611535911778323161990600202047335812665236784695821980802955007050498160452829335477036119094303084915004277044629605907318407566397947664875330421853665929397509331583528834929255899450417904186939731193700897256466874521689876651920775127696250029782179636421293187877495167406739363993300464326043851435232800170688751911040563657868691602313438006658399905588477903008432737611309689920219111154889672094733947549930020772196936809370758645952282470566570267239081126094098804731799692246636833036294225587427647304535913226512570873761776688206348639 , 3833487914242313378819434108513688065627053691673983399608816921037602279374665152466695797123518267472832291732929809630714718230349407600852873072577454103567815651064683889858737858018988859887176799209107555610438029038043054702761434525520274938268708893703912968012456019114312059390879789473695971924061681499028042066517835303765320298462149699451255600608805120538746592023873172054049004171036273586873464146373622260020112654077623486675212766201276689676571210051907878213084583848695347494156467728525890779923873668537276542348558358575241654156832473179828811659942819978821509757832704754102 , 884227670301398205806036237885673489794589850916644991891316845355535910849089165148992511580569462415839175544365378399036605530483114930797785738701486865318815579925386056940082723247786053203405513311413178004668290711216587279976585956250945661068384229033276896637767269133468294453361946807302113316626996610774665370812483815977665776730496695745394936570558772561143550268132809202487575906268004922083529768692530533859783390704320143874455669268023976446372139379522701512501394589897184977389430053743420453631029844597271734806480741536979368531348102390185496618858890658761515126456780417806 , 4650455490097655733832976488186981781238392107709968153352076282056842201764978521727907715782183489476319465552057260508930486914669731797157749432557079029041275092304723059583215482390327108225429675695013416156981588697480833307299663208604124180200503283285180334391844471906737604676557044887200881064774900407043728813855022543758024084817381712776718182436736938987065511700086314031431391661790894563388470040282287566233461568242932038165013498642883061075598932213704092468246869085189344221886205865611423386220335789711983635779742200439278570653010650269085339842540595107623433736216721309357 ]predictor = ExtendMT19937Predictor() for i in range (10 ): predictor.setrandbits(list [i], 2016 ) for i in range (2 ): print (gmpy2.next_prime(predictor.predict_getrandbits(2016 )<<32 ))
不过最终事实证明,两种都没啥问题,只是第二种比较方便。
最后的处理 这题加密的RSA库的加密方式与传统的RSA有所不同:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
利用这两个库进行加密的时候会进行pad填充处理,其实理论上不影响,用long_to_bytes解直接能看到flag:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 from randcrack import RandCrackimport gmpy2from Crypto.Util.number import *list =[3600265381355011800604369729661573963612710583856212506545658333074852429990600726314135674548759570858351262908012949282212891542519305106962751727007362149708469686819748050996483865271557123237235648703377421566137839034113010750191629064356634517368870402690058113717875558312794512374974885601202863799749046561385365768063498784814448786640372932810512239460911099581866725281270129457067796775074394695587754248229141673874819102350216092845573296781783861707029124711116336816170035789910773422844025959034069644139823743187425115167175093301548318030822470998819584829825906212545143905770241396368 , 4817133463471453198428421724055510657300236861968071382969324879726323848060330555371547119808753420047534779374579128185549253172742713334594545998949652767249840813701426174426518547280870584064238611099900203404065005465511964677141340532671932434023046148664909131354411362314994560484009837116140892946013884868181058158225451545677966491404463355910291955883702634244436917274121422968501861212369587093053816220793024776593440099061813499603413938552891122263176441219237760895847492692282759544436521394939331277943772962636951401825442292010598866502339863473831351796439464211956633336140714936091 , 5320985707957182464040016394767710336981155975260726958323250923521354629117853764934556740947855596798863238401760126048848459985182048990865607049236087766457632811795814296090981304235470780746115486653453233629654840725302888729555750551634791327737624021914530218194896080743108937438723209634695487781051652819143405638999309562786198289918933798259419294897022898320243694222932439360673535068138044883752460243760791362190060387472043568148435580879715644013128735121643766648176565421872828379995558920914383623712812039193491820705844857517386299044583692230500293902134456103817887941918137670476 , 6103724407510629902108247826148113166486441306090215047925636496596244026431075146089318097310457535274545145720087483352023263429259853031395440800707590279250812628751259981104988389130473778474422554471991638062721194954559286056509663416143268183106221134570350825574093156385007706993953846837310675668273336245684705824074684533975599446369202277889983471718721612625780600896262842621115391081844839614819550798593632699449553122181971701082078292484491250676416128435898685973887339369321495919025223496171602845899319026056945842903604676049073160779149208311182579527170884638290725668737779393295 , 4869952293485307201849272034040709529173145583179893663678794036912765707481488928691048416481685293644454346754026194189471394243420189635244241971617405219211600574534934416803366472721950176394073491033943471502102861891549695312488491782258470680771475748815344888320267529711937062436449859623328312832801208512387507383929100722015207891279245089052514428882052674399575458791619778703599539124366156305525344914435281805520385759704242333183054601193188696526631006422498353677164131887595128324852413268542447360634055039317080283700647542464128697047944776564629428419660592398742380439552234852792 , 4285632992754820150722119126482059603267423755331360028619749952541858328581118679369849121044325280796994891397111220877798027444951860158453235210630805079844816773804421837113424171851171976359484628498874866924424398454233437952901025012211593258761248604409143201629679222686633593211289120293853353030289988193401376986399585011496182072908570769332510733651794324562258036980781567190606205973835714060131764319664288798714340741293275917472294478304013955046434808568768542848882878382183636989281256602389408475343914392096292108626471238918229714731498007494271904546308577038076210571781147001419 , 7173054866684378506127542172995536857120071023414954611535911778323161990600202047335812665236784695821980802955007050498160452829335477036119094303084915004277044629605907318407566397947664875330421853665929397509331583528834929255899450417904186939731193700897256466874521689876651920775127696250029782179636421293187877495167406739363993300464326043851435232800170688751911040563657868691602313438006658399905588477903008432737611309689920219111154889672094733947549930020772196936809370758645952282470566570267239081126094098804731799692246636833036294225587427647304535913226512570873761776688206348639 , 3833487914242313378819434108513688065627053691673983399608816921037602279374665152466695797123518267472832291732929809630714718230349407600852873072577454103567815651064683889858737858018988859887176799209107555610438029038043054702761434525520274938268708893703912968012456019114312059390879789473695971924061681499028042066517835303765320298462149699451255600608805120538746592023873172054049004171036273586873464146373622260020112654077623486675212766201276689676571210051907878213084583848695347494156467728525890779923873668537276542348558358575241654156832473179828811659942819978821509757832704754102 , 884227670301398205806036237885673489794589850916644991891316845355535910849089165148992511580569462415839175544365378399036605530483114930797785738701486865318815579925386056940082723247786053203405513311413178004668290711216587279976585956250945661068384229033276896637767269133468294453361946807302113316626996610774665370812483815977665776730496695745394936570558772561143550268132809202487575906268004922083529768692530533859783390704320143874455669268023976446372139379522701512501394589897184977389430053743420453631029844597271734806480741536979368531348102390185496618858890658761515126456780417806 , 4650455490097655733832976488186981781238392107709968153352076282056842201764978521727907715782183489476319465552057260508930486914669731797157749432557079029041275092304723059583215482390327108225429675695013416156981588697480833307299663208604124180200503283285180334391844471906737604676557044887200881064774900407043728813855022543758024084817381712776718182436736938987065511700086314031431391661790894563388470040282287566233461568242932038165013498642883061075598932213704092468246869085189344221886205865611423386220335789711983635779742200439278570653010650269085339842540595107623433736216721309357 ]num1,num=[],[] for i in list : num1.append(str ('0' *(2016 -len (bin (i)[2 :]))+bin (i)[2 :])) for i in num1: for j in range (1984 ,-1 ,-32 ): num.append(int (i[j:j+32 ],2 )) r = RandCrack() for i in range (6 ,630 ): r.submit(num[i]) p,q = gmpy2.next_prime(r.predict_getrandbits(2016 )<<32 ),gmpy2.next_prime(r.predict_getrandbits(2016 )<<32 ) e=0x10001 c=b'6\xe1\x1c\xd8n\x1e\xeb\x97$\xb3L\xf3=\xb5\xd3p\x12\xd5OM\xa6\x87qqb\xc5>\x92]5g\xb4\xc2cS\xc6\x99\xb3\x9d\xa6\xd3\xdd\x1ci\xbd\xd6\xfd\xe9\xcc\xc7\xb4V-\x8c\xb8\x1c\xa7\x18b\x84F\xc2\xa9Cy\xd8\x83u\x0c_\xbf<\x96a{\x16M\xc8.\xab\x92\xb1\xa4\xf7cGN\x9c@,\xf7\xffrrV\x01\x03\x9e\x07\xe8Q\x7f\xa5D\xc6*~#\x0b\x91\xbch\xf5\x92N(\xd4\x02\xf5-\xf2\x15\xdeG\xbb\xfc\xb6\xb9\x1d7\x086\xbf=\x9es\xd2\x1d\xae\xb4\xd61\xe4\xcc\x7f\xdf\xe0!=\x14 \xbdP2pI!a\xc7+_{\x88\x19r\x8cf"<\x94\xb1\xce\xbd#\xa4\x9c\x92\xbcw\x92\\\x87\xad\xb9\xdf\x88,\xf2\x14\x00\xbd\xb8\x9e^R\xd0_i4k\xe2\x08\x1c\x0bF\xbb\xa63\x94\xd4\xb5\xe0\xd1\x93\x00\xd4\x9c\x96\xe5\xfc\xff9\xb8J;\xd3\x94YCr\xac\xf6\xc2\x96T\x17M\xb1=z\xd4TI\xb7\x84C\xc3\x92.\xb7\xe4\xfe\xe0\x14}YVc \x1c\x1d.\xcd\'\xber\xa9\x175W\xd8\xd6\xd0F\xc7\xe3\x86K*.m/A\xaak\xf6\x12\xd5\xe3-\x0c[\\$\xbe\x05\x95B\x04\xfd\x1e\xbc>S\xbc>w\x15\n*\xb7\x8b\xe7w\xbf\xed\x05\xca\xda\xb7\xdbs^r{\xb5\xe6e0\xb4\x90v\xaf\xbbV\xcd\xa9\xd8\xc5P\x01J\xe4\x02/\xef\xe7N\xc3\xcd\x81P2\x83\xf8C\x06sq8\x91?\xaf\xf5q\xfaN\x9c\xfd\xfdJ.\xa7\x1cb/O\xaf&\xb0\xae\xc4d>o\xbf\xe9s\xcd\xa7\x01=\x81\xdc\x9c\xc5\xfe\x81\xbe\xf9H\xae\xc6\x19\xec\xa8\xa1w\x115\x8b\x81\xca\xce\xcdH b\x8a\x87q\x1d\x12\xa3\xc7\xfe\xda\x90\xd9G\x84\x94\xd6\xe0\xcc"@\xfb\x07\xdd\x96\xbb\xc5\xfb\xd0:8\xb8q\xa8L\xc1\x04\xb1a\xf0`\x9e\xd7"p\xe1\x03=\xeb\xd9lQ\x17\x84\x87\x8e\xe3\x10\xb6\xf8\xb7\x85\xeb\xb1Y\\\x17\x12\xc6xGf\xc2\xe1\x17\x1f\x08\x0fV\x94T Em\x1b\x86\xc3o\x9e\x1f\x82\x80\xce\x1e\xbc\xa6' n=p*q phi=(p-1 )*(q-1 ) d=gmpy2.invert(e,phi) print (long_to_bytes(pow (bytes_to_long(c),d,n)))
用那两个库联合来解的话大致代码是这样,注意最后在decrypt的时候需要加一个额外的sentinel参数,最简单的是像我这样放个0,或者用sentinel=None
,'error'
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 from randcrack import RandCrackimport gmpy2from Crypto.Util.number import *from Crypto.PublicKey import RSAfrom Crypto.Cipher import PKCS1_v1_5list =[3600265381355011800604369729661573963612710583856212506545658333074852429990600726314135674548759570858351262908012949282212891542519305106962751727007362149708469686819748050996483865271557123237235648703377421566137839034113010750191629064356634517368870402690058113717875558312794512374974885601202863799749046561385365768063498784814448786640372932810512239460911099581866725281270129457067796775074394695587754248229141673874819102350216092845573296781783861707029124711116336816170035789910773422844025959034069644139823743187425115167175093301548318030822470998819584829825906212545143905770241396368 , 4817133463471453198428421724055510657300236861968071382969324879726323848060330555371547119808753420047534779374579128185549253172742713334594545998949652767249840813701426174426518547280870584064238611099900203404065005465511964677141340532671932434023046148664909131354411362314994560484009837116140892946013884868181058158225451545677966491404463355910291955883702634244436917274121422968501861212369587093053816220793024776593440099061813499603413938552891122263176441219237760895847492692282759544436521394939331277943772962636951401825442292010598866502339863473831351796439464211956633336140714936091 , 5320985707957182464040016394767710336981155975260726958323250923521354629117853764934556740947855596798863238401760126048848459985182048990865607049236087766457632811795814296090981304235470780746115486653453233629654840725302888729555750551634791327737624021914530218194896080743108937438723209634695487781051652819143405638999309562786198289918933798259419294897022898320243694222932439360673535068138044883752460243760791362190060387472043568148435580879715644013128735121643766648176565421872828379995558920914383623712812039193491820705844857517386299044583692230500293902134456103817887941918137670476 , 6103724407510629902108247826148113166486441306090215047925636496596244026431075146089318097310457535274545145720087483352023263429259853031395440800707590279250812628751259981104988389130473778474422554471991638062721194954559286056509663416143268183106221134570350825574093156385007706993953846837310675668273336245684705824074684533975599446369202277889983471718721612625780600896262842621115391081844839614819550798593632699449553122181971701082078292484491250676416128435898685973887339369321495919025223496171602845899319026056945842903604676049073160779149208311182579527170884638290725668737779393295 , 4869952293485307201849272034040709529173145583179893663678794036912765707481488928691048416481685293644454346754026194189471394243420189635244241971617405219211600574534934416803366472721950176394073491033943471502102861891549695312488491782258470680771475748815344888320267529711937062436449859623328312832801208512387507383929100722015207891279245089052514428882052674399575458791619778703599539124366156305525344914435281805520385759704242333183054601193188696526631006422498353677164131887595128324852413268542447360634055039317080283700647542464128697047944776564629428419660592398742380439552234852792 , 4285632992754820150722119126482059603267423755331360028619749952541858328581118679369849121044325280796994891397111220877798027444951860158453235210630805079844816773804421837113424171851171976359484628498874866924424398454233437952901025012211593258761248604409143201629679222686633593211289120293853353030289988193401376986399585011496182072908570769332510733651794324562258036980781567190606205973835714060131764319664288798714340741293275917472294478304013955046434808568768542848882878382183636989281256602389408475343914392096292108626471238918229714731498007494271904546308577038076210571781147001419 , 7173054866684378506127542172995536857120071023414954611535911778323161990600202047335812665236784695821980802955007050498160452829335477036119094303084915004277044629605907318407566397947664875330421853665929397509331583528834929255899450417904186939731193700897256466874521689876651920775127696250029782179636421293187877495167406739363993300464326043851435232800170688751911040563657868691602313438006658399905588477903008432737611309689920219111154889672094733947549930020772196936809370758645952282470566570267239081126094098804731799692246636833036294225587427647304535913226512570873761776688206348639 , 3833487914242313378819434108513688065627053691673983399608816921037602279374665152466695797123518267472832291732929809630714718230349407600852873072577454103567815651064683889858737858018988859887176799209107555610438029038043054702761434525520274938268708893703912968012456019114312059390879789473695971924061681499028042066517835303765320298462149699451255600608805120538746592023873172054049004171036273586873464146373622260020112654077623486675212766201276689676571210051907878213084583848695347494156467728525890779923873668537276542348558358575241654156832473179828811659942819978821509757832704754102 , 884227670301398205806036237885673489794589850916644991891316845355535910849089165148992511580569462415839175544365378399036605530483114930797785738701486865318815579925386056940082723247786053203405513311413178004668290711216587279976585956250945661068384229033276896637767269133468294453361946807302113316626996610774665370812483815977665776730496695745394936570558772561143550268132809202487575906268004922083529768692530533859783390704320143874455669268023976446372139379522701512501394589897184977389430053743420453631029844597271734806480741536979368531348102390185496618858890658761515126456780417806 , 4650455490097655733832976488186981781238392107709968153352076282056842201764978521727907715782183489476319465552057260508930486914669731797157749432557079029041275092304723059583215482390327108225429675695013416156981588697480833307299663208604124180200503283285180334391844471906737604676557044887200881064774900407043728813855022543758024084817381712776718182436736938987065511700086314031431391661790894563388470040282287566233461568242932038165013498642883061075598932213704092468246869085189344221886205865611423386220335789711983635779742200439278570653010650269085339842540595107623433736216721309357 ]num1,num=[],[] for i in list : num1.append(str ('0' *(2016 -len (bin (i)[2 :]))+bin (i)[2 :])) for i in num1: for j in range (1984 ,-1 ,-32 ): num.append(int (i[j:j+32 ],2 )) r = RandCrack() for i in range (6 ,630 ): r.submit(num[i]) p,q = gmpy2.next_prime(r.predict_getrandbits(2016 )<<32 ),gmpy2.next_prime(r.predict_getrandbits(2016 )<<32 ) e=0x10001 c=b'6\xe1\x1c\xd8n\x1e\xeb\x97$\xb3L\xf3=\xb5\xd3p\x12\xd5OM\xa6\x87qqb\xc5>\x92]5g\xb4\xc2cS\xc6\x99\xb3\x9d\xa6\xd3\xdd\x1ci\xbd\xd6\xfd\xe9\xcc\xc7\xb4V-\x8c\xb8\x1c\xa7\x18b\x84F\xc2\xa9Cy\xd8\x83u\x0c_\xbf<\x96a{\x16M\xc8.\xab\x92\xb1\xa4\xf7cGN\x9c@,\xf7\xffrrV\x01\x03\x9e\x07\xe8Q\x7f\xa5D\xc6*~#\x0b\x91\xbch\xf5\x92N(\xd4\x02\xf5-\xf2\x15\xdeG\xbb\xfc\xb6\xb9\x1d7\x086\xbf=\x9es\xd2\x1d\xae\xb4\xd61\xe4\xcc\x7f\xdf\xe0!=\x14 \xbdP2pI!a\xc7+_{\x88\x19r\x8cf"<\x94\xb1\xce\xbd#\xa4\x9c\x92\xbcw\x92\\\x87\xad\xb9\xdf\x88,\xf2\x14\x00\xbd\xb8\x9e^R\xd0_i4k\xe2\x08\x1c\x0bF\xbb\xa63\x94\xd4\xb5\xe0\xd1\x93\x00\xd4\x9c\x96\xe5\xfc\xff9\xb8J;\xd3\x94YCr\xac\xf6\xc2\x96T\x17M\xb1=z\xd4TI\xb7\x84C\xc3\x92.\xb7\xe4\xfe\xe0\x14}YVc \x1c\x1d.\xcd\'\xber\xa9\x175W\xd8\xd6\xd0F\xc7\xe3\x86K*.m/A\xaak\xf6\x12\xd5\xe3-\x0c[\\$\xbe\x05\x95B\x04\xfd\x1e\xbc>S\xbc>w\x15\n*\xb7\x8b\xe7w\xbf\xed\x05\xca\xda\xb7\xdbs^r{\xb5\xe6e0\xb4\x90v\xaf\xbbV\xcd\xa9\xd8\xc5P\x01J\xe4\x02/\xef\xe7N\xc3\xcd\x81P2\x83\xf8C\x06sq8\x91?\xaf\xf5q\xfaN\x9c\xfd\xfdJ.\xa7\x1cb/O\xaf&\xb0\xae\xc4d>o\xbf\xe9s\xcd\xa7\x01=\x81\xdc\x9c\xc5\xfe\x81\xbe\xf9H\xae\xc6\x19\xec\xa8\xa1w\x115\x8b\x81\xca\xce\xcdH b\x8a\x87q\x1d\x12\xa3\xc7\xfe\xda\x90\xd9G\x84\x94\xd6\xe0\xcc"@\xfb\x07\xdd\x96\xbb\xc5\xfb\xd0:8\xb8q\xa8L\xc1\x04\xb1a\xf0`\x9e\xd7"p\xe1\x03=\xeb\xd9lQ\x17\x84\x87\x8e\xe3\x10\xb6\xf8\xb7\x85\xeb\xb1Y\\\x17\x12\xc6xGf\xc2\xe1\x17\x1f\x08\x0fV\x94T Em\x1b\x86\xc3o\x9e\x1f\x82\x80\xce\x1e\xbc\xa6' n=p*q phi=(p-1 )*(q-1 ) d=gmpy2.invert(e,phi) privateKey = RSA.construct((int (n),int (e),int (d),int (p),int (q))) Cipher = PKCS1_v1_5.new(privateKey) c = Cipher.decrypt(c, 0 ) print (c)
坏男人 4.24官方wp发布,补充一道题:
1 2 3 4 n=28743528431024344617680737414913106476511322306414619055395106718152677406354611490244660644658908122314212254737913466167460186811153249608791381688088132332606543760622284548113425802123604359986160331524999684372630367816298739938262574623254151758410930291127039505423300547979760870363488617069325577882894536182534099316753592885148029517047329911315977951646330684583948360132273605993290571537792956857145028945406852800817208586203447517926942521712639423933712291615508436052513532364715976987187880267353667818607096597541374344389394428837399446009168995807575173853558117282387639314617529093142344155137 e=0x10001 enc_to_itself=21884802678342960251926179503823259930768742823965214543770966066083075460872859624925099212884772287487921054646946811502384680382668329804607223512229155483259929429827359716506150173084370385813417536768929555624622792207918611995301393993847242171021991001236264441512444616732564521692242164942377415737801191016092987279301050474632427841915368175408625100568974326877708399000769449792840064795397513381418062004179944827406924915572126936126670701693169619468231180857076968443201948002890391112514596191975462107407208346817691153895187771215136124605449425342375920766802783143720442864156673768877874262510 ct=11477002885978764094640005747666297892652635979942793178031845789152667395230315749335098741226454094422185987973567769802943863647999276315842957951570544805757278108589269160010493870759819086699538819431731597636830531205583387337016133458696657488788603285862983857525879489957904400845863000711211960636523336534109938942596381803864140137363035398119619200104279840763198791912576282374066227592705415594283866426101690802207884729578550094942197986608731522562087517317195064804631740453324034579979422504367912537121313835055574661470474094742846950766589183024166060646234528365778013825681264962170510572829
当时最后看的题就是这一道,由于剩的时间太短了没研究出来开摆了,看了看wp发现好像不是很难……
根据题目,可以得知: $$ a^e\bmod n=a $$
$$ a^{e-1}\equiv 1(\bmod n) $$
这题接下来需要对上式因式分解,找规律求公因子,先把1移过去: $$ a^{e-1}-1\equiv 0(\bmod n) $$ e是65537,e-1就是65536,有趣的是65536是0x10000,也就是2的16次方,进一步变形: $$ a^{2^{16}}-1\equiv 0(\bmod n) $$ 不断使用平方差公式对其进行因式分解: $$ [(a^2)^{15}+1][(a^2)^{14}+1]…(a-1)\equiv 0(\bmod n) $$ 所以,得到的同余式左边的项中具有p或者q的倍数,可以逐个检验求最大公因子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import gmpy2from Crypto.Util.number import *n=28743528431024344617680737414913106476511322306414619055395106718152677406354611490244660644658908122314212254737913466167460186811153249608791381688088132332606543760622284548113425802123604359986160331524999684372630367816298739938262574623254151758410930291127039505423300547979760870363488617069325577882894536182534099316753592885148029517047329911315977951646330684583948360132273605993290571537792956857145028945406852800817208586203447517926942521712639423933712291615508436052513532364715976987187880267353667818607096597541374344389394428837399446009168995807575173853558117282387639314617529093142344155137 e=0x10001 k=21884802678342960251926179503823259930768742823965214543770966066083075460872859624925099212884772287487921054646946811502384680382668329804607223512229155483259929429827359716506150173084370385813417536768929555624622792207918611995301393993847242171021991001236264441512444616732564521692242164942377415737801191016092987279301050474632427841915368175408625100568974326877708399000769449792840064795397513381418062004179944827406924915572126936126670701693169619468231180857076968443201948002890391112514596191975462107407208346817691153895187771215136124605449425342375920766802783143720442864156673768877874262510 c=11477002885978764094640005747666297892652635979942793178031845789152667395230315749335098741226454094422185987973567769802943863647999276315842957951570544805757278108589269160010493870759819086699538819431731597636830531205583387337016133458696657488788603285862983857525879489957904400845863000711211960636523336534109938942596381803864140137363035398119619200104279840763198791912576282374066227592705415594283866426101690802207884729578550094942197986608731522562087517317195064804631740453324034579979422504367912537121313835055574661470474094742846950766589183024166060646234528365778013825681264962170510572829 assert gmpy2.gcd(k-1 ,n)==1 for i in range (15 ): if gmpy2.gcd(pow (k,2 **i)+1 ,n)!=1 : p=gmpy2.gcd(pow (k,2 **i)+1 ,n) break q=n//p phi=(q-1 )*(p-1 ) d=gmpy2.invert(e,phi) m=pow (c,d,n) print (long_to_bytes(m))