flag = b"NSSCTF{**********}" p = getPrime(2048) q = getPrime(2048) n = p * q g = n + 1 flag = flag + os.urandom(256) m = bytes_to_long(flag) assert m < n c = (pow(g, p, n * n) * pow(m, n, n * n)) % (n * n) print(f"c={str(c)}") print(f"n={str(n)}") print(f"hint={str(pow(m,n,n*n))}")
c = 225125450220105311041046087138705014935254833514432026429584708396889028070062588108440123503358315412941287776223277500809768767439104080138297877350350894870758555269962097045159281057417431708547199138245618813714897557577285863754036266189213471368988610466376049286399874738062055685783390740595224944655129698982615040363901449545718380849761071015663791441186331518855739660902574919658732296357516846617576532097729752124495525310383044246570860459909674468043892116366954178748744887759943538790955380359436920063097509390536113768584902582460152926841907280244934216418491322797359434627754957992373050770075511579834413910935998173887010591932095758778213506980556707387273313496684061141759069963822192246551429983980602784990878940678014896861847624508034734156619132941559616428732594747155812840073301505961649354821739626425210040140140650554613157261226142497098560014081654159162728304425366810991382925509980326196236887943866743844631440548314644099174455685333882262795291937108712195373810627256662737628113029324427725347874524870861726805090042722616988124350541708398849119521144223001484465059991547990967909997007025255966479981919446021970120511978531963304185576055142155556544534647723351656844147958836545604036280498193500867152760851781231961559038319804525142533245794507887086366035722991225921822049271508605775131456684268049567333571305767713317603509041456665383432380458303139215731899608675150974435258791424958521435089856187414088512969509730099511262804937577771637135080016736306516158564202320479634578997068609714361458607314838738852711267579801655606675023948561754394369562904377238896770861047226941797609026757220098060456408394694512893139400876964371093558705745860523407195806511035991545808668572847832037238730648633886746413394313505294649066849052224646247997606337262457830075157683947211444584365887544810340666518252333865602941279237496051328375479993587757115598218473119972573396768024836804836954132576124452286424703686303724425547789543965055806303501780543406870213426791296938778530045481070868000304044514218232380289752757390300367760650522841703714524787933373399597582884888995101012481882069017642507612679191655440043567769752947541659407893649684979816018588056421086155682587686444696839473117919463948740598839356581628532707900766874721178735996094304063716395016189050622613865084670796925930632957269961065884332253157016662708299839723103293775144413608290811536878360518365969977672 n = 537704258136737772334289112157748201800577202045620524505164301000631802631518587884386010036030239953729672206334839422975257173569581511943218509199368473534767909131533916054000343397476255472410057803958031686283319265951508688824310413358459958769136535050441162363642859566835559964713658249715369502842906062505206255731671726850056726942898220380975891747284373542762467274135972474456753867954779496195382189948988745920240482811159002813575817211618052191504265204351143241124177136745488759794281466672726136044652606085144968587996290914257439088900301074791431625031800127807318907794431078348358129522553577048782080298489769456218151884724675077231784845616941801486600893202954039362083246165052316620134739383905800413890856823428743847766265894746887631528817253743766088118533423311798345443766948094538302985091421660682136033531115503987607110481356904149149526282183360828773159635634730439988764520577060231547737606453192992788155122703192824963856686478000004264736216604217895714882969433531376365800710689831597596633161940749894182066753234853099532538054185144292479569863660946353095969092374268598983684020415150102396846616294660770625160902861916257029081351903872365230567791249525163496231055895067 hint = 47886103635974061334738696817505925206008923897565928150561771513914724526595573829591619709938559400940389141961851599955385265501826710621148821656831141085075562581864479233819131947415101078882068156163161848949521314963939166893511103952224692035005548780056277062017247931909057899253665428766657713029336880637928048151697855321187382076094403707286731411067921432004568329507804813975821978559221476933925854656445865719791207916111962826391396743644316463136438819988590704146950416860857554126676137265643589023911865407086113823589909768612304751490985778202249113266072429773376059806740293230440346878164196957488528640988752910108879722554389253825075538112288942832674983293521863664807642835037726668137699968092875962464625663543111536462033441813622214186431402007971410782513784521523246689064395099905282157694474068014013696412472311829756135290113812615257159471234175572894243757785555225944765219006077811656790178793248029858780954722807362472772119239096865144691982879763702595804240333195592747878503327699078886932376601205231739345645128969631502358729857038969868954692589495208914061479786322546773676859671126744502137589452004253647691303411052856915756464022560754512403296905511498273403466513184930519859058769900206628155880057348169594642309562380520586287635379283568522431874866504161213852947626202329695380933021696888632278381377801478650004662055042607980254914370975248463287962595759260914565488610311073394497076658915022604107825761748655952754203536242004955569468685796492106854447889421926172288692056518641428557695760344780401512911326772988689291340211959826809107210891399237585398110490266424018109890469033675344944316169138618595122787320628548024427684447970316867368904611136038590785545417930521148331279101090177401733386548020680836924024562578327764829143717197122938468927540011778852803272225391981411647224716134649523022711971744197814091168439648167266615972644774754582164498033839364474819015370267923120197091159805765686532165410857119247801897165746399333797829911056993706487584253035779480029520748480701096802590903142242892610898833928011746466021002547650026168978858744273473970883554693126359349655013051523511240984880443925387885665601883119494945669268976784670013509831304571675418774692098993256394139735277956696398163556362611953621069406975863327869760150215045731920838652536753008296599617886665590801532574846096634784646720344297528527329570379209738690849026495446253840
c1 = c * gmpy2.invert(hint, n**2) % n**2 p = gmpy2.gcd((c1 - 1) // n, n) q = n // p phi = (p - 1) * (q - 1) d = gmpy2.invert(n, phi) print(long_to_bytes(pow(c, d, n)))