from Crypto.Util.number import * from random import *
table = "01234567" p = getPrime(328) flag = b"NSSCTF{" + "".join([choice(table) for i inrange(70)]).encode() + b"}" c = bytes_to_long(flag) % p
print("p =",p) print("c =",c)
''' p = 501785758961383005891491265699612686883993041794260611346802080899615437298977076093878384543577171 c = 327005346153237517234971706274055111857447948791422192829214537757745905845319188257204611848165263 '''
p = 501785758961383005891491265699612686883993041794260611346802080899615437298977076093878384543577171 c = 327005346153237517234971706274055111857447948791422192829214537757745905845319188257204611848165263
Ge = Matrix(ZZ,72,72)
temp = bytes_to_long(b"NSSCTF{") * 256^71 + bytes_to_long(b"}") for i inrange(70): temp += 48*256^(70-i)
for i inrange(70): Ge[i,i] = 1 Ge[i,-1] = 256^(70-i) Ge[-2,-2] = 3 Ge[-2,-1] = (temp - c) Ge[-1,-1] = p
for line in Ge.BKZ(): m = "" if line[-1] == 0andabs(line[-2]) == 3: print(line) for i in line[:-2]: m += str(abs(i)) flag = "NSSCTF{" + m + "}" print(flag)
from Crypto.Util.number import * from random import *
table = "01234567" p = getPrime(328) flag = b"NSSCTF{" + "".join([choice(table) for i inrange(80)]).encode() + b"}" c = bytes_to_long(flag) % p
print("p =",p) print("c =",c) print(flag)
''' p = 324556397741108806830285502585098109678766437252172614832253074632331911859471735318636292671562523 c = 141624663734155235543198856069652171779130720945875442624943917912062658275440028763836569215230250 '''
p = 324556397741108806830285502585098109678766437252172614832253074632331911859471735318636292671562523 c = 141624663734155235543198856069652171779130720945875442624943917912062658275440028763836569215230250
T = 2^100 for i inrange(80): Ge[i,i] = 1 Ge[i,-1] = 256^(80-i) * T
Ge[-2,-2] = 1 Ge[-2,-1] = (temp - c) * T Ge[-1,-1] = p * T
for line in Ge.BKZ(block_size=16): m = "" if line[-1] == 0andabs(line[-2]) == 1: print(line) for i in line[:-2]: m += chr((52 + i)) flag = "NSSCTF{" + m + "}" print(flag) # NSSCTF{25350625451533421162474265547571536103420331260232652121722452361537257541460235}
配大系数为了规约出0,用BKZ(size_block=16)是为了更精确
easy_mod3
task.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
from Crypto.Util.number import * from random import *
table = "Nss" p = getPrime(328) flag = b"NSSCTF{" + "".join([choice(table) for i inrange(100)]).encode() + b"}" c = bytes_to_long(flag) % p
print("p =",p) print("c =",c)
''' p = 421384892562377694077340767015240048728671794320496268132504965422627021346504549648945043590200571 c = 273111533929258227142700975315635731051782710899867431150541189647916512765137757827512121549727178 '''
a = 45555123520257048008361164001647572835532085872486083041351888153797515821243735097183247955697359 b = 239164398481349502043896111008649757386543450830551935967097412807436958061529609260212051767411138 p = 421384892562377694077340767015240048728671794320496268132504965422627021346504549648945043590200571 c = 273111533929258227142700975315635731051782710899867431150541189647916512765137757827512121549727178
T = 2^100 for i inrange(100): Ge[i,i] = 1 Ge[i,-1] = 256^(100-i) c += b*256^(100-i) c %= p Ge[-2,-2] = 1 Ge[-2,-1] = -c Ge[-1,-1] = p Ge[:,-1:] *= T
for line in Ge.BKZ(): m = "" if line[-1] == 0andabs(line[-2]) == 1: print(line) for i in line[:-2]: if i == 0: m += "s" else: m += "N" flag = "NSSCTF{" + m + "}" print(flag) # NSSCTF{NNNssNsNNNNsNNNsNNNNNssNNNssNNNsNsNNsNsNNssNNNNNNsNNNssNsNNNNNssNssssNsNNsNsssNNNNssNNNssNsNNssNsNss}
easy_mod_final
旧附件
task.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
from Crypto.Util.number import * from random import *
p = 382341578876755047910270786090569535013570954958220282576527310027607029356817834229805565170363061 table1 = "NsS" table2 = [363240026866636825072669542082311717933742315917012606686823760007829170314055842025699242629919061, 353526073204447024446020739384656942280539226749705781536551943704760671350652481846175115676519925, 343812119542257223819371936687002166627336137582398956386280127401692172387249121666650988723120789] choose = [choice(table1) for i inrange(100)]
flag = b"NSSCTF{" + "".join(choose).encode() + b"}" c = 0 for i inrange(len(choose)): c += 256**i*table2[table1.index(choose[i])] c %= p
print("c =",c)
''' c = 207022199908418203957326448601855685285890830964132201922954241454827344173832839490247666897642796 '''
正解似乎是通过table2中的值是模p的等差数列,所以构造1,0,-1代换,不过我看不出来这是等差数列 $$ am_0 + b \equiv 1 \mod p $$
$$ am_1+ b \equiv 0 \mod p $$
$$ am_2 + b \equiv -1 \mod p $$
以$1,0,-1$表示N,s,S,解出a,b分别为
1 2
a = 209130262916047757416181023902826867689263063069308312825701745088099619813047283985737596011902631 b = 184152803971204556520143517132487605286111694029965260002835796960581806700950306119300303760936459
p = 382341578876755047910270786090569535013570954958220282576527310027607029356817834229805565170363061 a = 209130262916047757416181023902826867689263063069308312825701745088099619813047283985737596011902631 b = 184152803971204556520143517132487605286111694029965260002835796960581806700950306119300303760936459 c = 207022199908418203957326448601855685285890830964132201922954241454827344173832839490247666897642796
Ge = Matrix(ZZ,102,102)
c = c * a % p T = 2^100 for i inrange(100): Ge[i,i] = 1 Ge[i,-1] = 256^i c += b * 256^i c %= p
Ge[-2,-2] = 1 Ge[-2,-1] = - c Ge[-1,-1] = p Ge[:,-1:] *= T
for line in Ge.BKZ(): m = "" if line[-1] == 0andabs(line[-2]) == 1: print(line) for i in line[:-2]: if i == -1: m += "N" if i == 0: m += "s" if i == 1: m += "S" flag = "NSSCTF{" + m + "}" print(flag) # NSSCTF{NssSNSsNSNSNsSssSssSssSSsNsNNNNNSsNNssNsSSSSSssSNSsSssSSSNSsNsSsSsSsSNSSsSSsNNsNSsSNSNsSSSNNSNSSSSSs}
from Crypto.Util.number import * from random import *
table = "GAME" p = getPrime(440) flag = b"NSSCTF{" + "".join([choice(table) for i inrange(100)]).encode() + b"}" c = bytes_to_long(flag) % p
print("p =",p) print("c =",c) print(flag)
''' p = 2271129678202363707972156644097566224560370806295266873816026779022614695317611229903770390498322537051358521932851893609555063610221 c = 244176818026839545554951436126300508547217557099550914232243928051857553603712968234687200629719468115535825237511413058786560692170 '''
根据前几题的经验,思路还是把G,A,M,E对应到很小的值,但是这题的难处在,对于直线$y \equiv ax + b \mod p$,只需要2点就能确定一条直线,如果随意选取$y$的话,很难能够找出系数$a,b$让(ord('G'),y1),(ord('A'),y2),(ord('M'),y3),(ord('E'),y4)四点共线
p = 2271129678202363707972156644097566224560370806295266873816026779022614695317611229903770390498322537051358521932851893609555063610221 c = 244176818026839545554951436126300508547217557099550914232243928051857553603712968234687200629719468115535825237511413058786560692170
R.<a,b> = PolynomialRing(Zmod(p))
f1 = a*ord('G') + b - 0 f2 = a*ord('A') + b - 3 f3 = a*ord('M') + b + 3 f4 = a*ord('E') + b - 1
F = [f1,f2,f3,f4] I = Ideal(F)
a = ZZ(-I.groebner_basis()[0].univariate_polynomial()(0)) b = ZZ(-I.groebner_basis()[1].univariate_polynomial()(0))
p = 2271129678202363707972156644097566224560370806295266873816026779022614695317611229903770390498322537051358521932851893609555063610221 a = 1135564839101181853986078322048783112280185403147633436908013389511307347658805614951885195249161268525679260966425946804777531805110 b = 1135564839101181853986078322048783112280185403147633436908013389511307347658805614951885195249161268525679260966425946804777531805146 c = 244176818026839545554951436126300508547217557099550914232243928051857553603712968234687200629719468115535825237511413058786560692170
T = 2^100 for i inrange(100): Ge[i,i] = 1 Ge[i,-1] = 256^(100-i) c += b*256^(100-i) c %= p Ge[-2,-2] = 1 Ge[-2,-1] = -c Ge[-1,-1] = p Ge[:,-1:] *= T
for line in Ge.BKZ(block_size = 16): m = "" if line[-1] == 0andabs(line[-2]) == 1: print(line) for i in line[:-2]: if i == 0: m += "G" if i == -3: m += "M" if i == 3: m += "A" if i == 1: m += "E" flag = "NSSCTF{" + m + "}" print(flag) # NSSCTF{GEEGEEEMEEMMAAMGGGGEEGMMAMEGGEEEGAGGMEMEMMAMGGGEAAGMGEAAGEMMEEEMGMAAMMGEAAEEEEEGGEMMMMAEGAAAMEMEAEGE}
from Crypto.Util.number import * from Crypto.Util.Padding import * from Crypto.Cipher import AES from hashlib import sha256 from random import * from secret import flag
p,q,r = getPrime(256),getPrime(256),getPrime(256) n = p*q*r phi = (p-1)*(q-1)*(r-1)
key = sha256(str(p+q+r).encode()).digest() enc = AES.new(key, AES.MODE_ECB) c = enc.encrypt(pad(flag,16))
''' n = 343127312894441264623060100705188723106648253383902349620699412384677995734576572885137280031507308915752070128528949423639735964709160841591038148069185325450544546735392923674211031016035209702254447128968565740534765322198664691 hint = 3802744632475774666777934738986183209966233570124815804333822490240409933768208822899072601181527365734196352249978937639454658680559993507805820991037544059215540360338084909833242583087617315128513337647913472696515770688338805196215328080662137260951972365100322795737835152857750114216709340410268143017180826135339564387228460663261697814425298725805568817218360964967025967384766127098203664964210047103829182895016532403825215903779806760754721373523135367007867453212189953817229696304611549977864533229540971457717668560698088917340909962348110683581294453903261530189579223087858081200349343639420534779115290433982968345085704202494045885911950427043282588446343291558819683037970053828479057449781943479407877748772895179095205885377333120540311815022381056 c = b';#\x1b\xa6R\xe2\x1d\x9dpf\x8e\xda\xe4\x14\x9a\xfb\tr\x99\x8a\xc9r\x03C\xb58Zb\x97\x0b\xc7S\x0fa\x88\xb4\xe4\x16.M\x92\x94\x94\x8b\xa9Ki\x9b\xe4\xe9d5\xa3~\x1a\x9cx\x03\xdc\x1f\x87\x14E\x90' '''
from hashlib import sha256 from Crypto.Cipher import AES import gmpy2
n = 343127312894441264623060100705188723106648253383902349620699412384677995734576572885137280031507308915752070128528949423639735964709160841591038148069185325450544546735392923674211031016035209702254447128968565740534765322198664691 hint = 3802744632475774666777934738986183209966233570124815804333822490240409933768208822899072601181527365734196352249978937639454658680559993507805820991037544059215540360338084909833242583087617315128513337647913472696515770688338805196215328080662137260951972365100322795737835152857750114216709340410268143017180826135339564387228460663261697814425298725805568817218360964967025967384766127098203664964210047103829182895016532403825215903779806760754721373523135367007867453212189953817229696304611549977864533229540971457717668560698088917340909962348110683581294453903261530189579223087858081200349343639420534779115290433982968345085704202494045885911950427043282588446343291558819683037970053828479057449781943479407877748772895179095205885377333120540311815022381056 c = b';#\x1b\xa6R\xe2\x1d\x9dpf\x8e\xda\xe4\x14\x9a\xfb\tr\x99\x8a\xc9r\x03C\xb58Zb\x97\x0b\xc7S\x0fa\x88\xb4\xe4\x16.M\x92\x94\x94\x8b\xa9Ki\x9b\xe4\xe9d5\xa3~\x1a\x9cx\x03\xdc\x1f\x87\x14E\x90'
temp1 = hint // 7**3 qr = gmpy2.gcd(pow(2,temp1,n)-1,n) p = n // qr print(p)
temp2 = hint // 277**3 pr = gmpy2.gcd(pow(2,temp2,n)-1,n) q = n // pr print(q)
temp3 = hint // 248701**3 pq = gmpy2.gcd(pow(2,temp3,n)-1,n) r = n // pq print(r)
from Crypto.Util.number import * import gmpy2 from tqdm import *
n = 20304817598463991883487911425007927214135740826150882692657608404060781116387976327509281041677948119173928648751205240686682904704601086882134602075008186227364732648337539221512524800875230120183740426722086488143679856177002068856911689386346260227545638754513723197073169314634515297819111746527980650406024533140966706487847121511407833611739619493873042466218612052791074001203074880497201822723381092411392045694262494838335876154820241827541930328508349759776586915947972105562652406402019214248895741297737940426853122270339018032192731304168659857343755119716209856895953244774989436447915329774815874911183 e = 65537 c = 7556587235137470264699910626838724733676624636871243497222431220151475350453511634500082904961419456561498962154902587302652809217390286599510524553544201322937261018961984214725167130840149912862814078259778952625651511254849935498769610746555495241583284505893054142602024818465021302307166854509140774804110453227813731851908572434719069923423995744812007854861031927076844340649660295411912697822452943265295532645300241560020169927024244415625968273457674736848596595931178772842744480816567695738191767924194206059251669256578685972003083109038051149451286043920980235629781296629849866837148736553469654985208 leak = 1511538174156308717222440773296069138085147882345360632192251847987135518872444058511319064
temp = gmpy2.iroot(n,2)[0]
high = 2 * (int(bin(temp)[2:][:700],2) << 324)
for i in trange(2**25,0,-1): p_add_q = high + i*2**300 + leak if (p_add_q**2 - 4*n < 0): t = gmpy2.iroot(4*n - p_add_q**2,2) if t[1]: p_sub_q = t[0] p = (p_add_q + p_sub_q) // 2 q = n // p d = gmpy2.invert(e,(p-1)*(q-1)) m = pow(c,d,n) print(long_to_bytes(m)) break else: t = gmpy2.iroot(p_add_q**2 - 4*n,2) if t[1]: p_sub_q = t[0] p = (p_add_q + p_sub_q) // 2 q = n // p d = gmpy2.invert(e,(p-1)*(q-1)) m = pow(c,d,n) print(long_to_bytes(m)) break # NSSCTF{JUST_@pply_Fermat's_factorization_method_W1tH_Brut3F0rce!}
h = 1756927950546402823211991210884487117388985427696056353000574684529449680817044069252055937789026298359737442776894512901268732373696001068086438971265520 p = 9154925474221530551204374718472364426110749279786123087256403092166680682021327157348820042798042742469289027059354748716972834115194900518063143041804941
''' a = 29089145861698849533587576973295257566874181013683093409280511461881508560043226639624028591697075777027609041083214241167067154846780379410457325384136774173540880680703437648293957784878985818376432013647415210955529162712672841319668120257447461567038004250028029752246949587461150846214998661348798142220559280403267581983191669260262076357617420472179861844334505141503479938585740507007167412328247901645653025038188426412803561167311075415186139406418297360055617953651023218144335111178729068397052382593835592142212067930715544738880011596139654527770961911784544010189290315677772431190278256579916333137165255075163459126978209678330136547554839703581615386678643718339211024128344190549574517564644382447611744798875041346881354781693931986615205673317996958906543168487424513288646586386898335386252942417294351991435595389041536593887748040184886941013614961741810729168951559211294246606230105751075721451317188926451002620849423314518170658209171671914315184519999959495351937563075042077266900864146159426562183965523296477064353921084645981585062809887031916148806349242025315612913825933164149679421566262446757892475611986630543538188150542432463200651189833933982458007114429715435568714619661080138790893459960671301328455259702189597680258358027148120577359065875450633562059381985788036798654456426180261922908112060328808638698523351620789566317389045953829508142189900185007810978556531031234520426854056485675147172190502028351264431318960694075186507102430581156550179324060430995652420952731818727684039692796018771140481392835706804763480391403219506727895338895364591606497253163676677638669786786858737497920439433198267927890300667623673919500396414839378381934354516285899285278671196050670328000271445003863863854641343057226519772851093922041622949244909881042639419520750870739146022239848882362576253955639971615811326995401478442990402656532205515168792715334542129193521733882886780427236290633270965571593377055933030570964314193668632743086843644521712276882644432083012275643889490106050284317873072564495246844741833922331897169054478543498374111011001360629887265387016903 b = 23842135454777432891743223391138265563241799870175456642327123278749657522050965688647025271946838603033997215457359121062031090678062337376719430593135764515364544052891212988546634081941717578522276652565205405071925932782899189391582928430745625545751168223235578140422316604775465116636679365817463642606682382103650151553859378443311951637645862682606805670610169631771916714125895199501221576523042203542953632992797 n = 11325979084644128572298911896847368512066889699114922766957825496829789701040409280284912163337390977205935027654824418075908113980923567819511384456223871894254826496727684822147076089401320253972280078822901143659851738555573580052473815798989309369428595758953805619194262607259107358103749807085316873971927412767250429330952340169403993890298557816024130952523480708504075717017477 c = 91637278981727419311704062766528605893241365739887714388981571071807672497690225964001055671982318124750997320763003521883860470498708606433206468782382765369836856610266602374015551078759628514665188339252922366320922478645026704734702460355236791287112842409076450962765866362852307351865564192898522584768904066046337899302561685937649000409332117647123 '''
a = 29089145861698849533587576973295257566874181013683093409280511461881508560043226639624028591697075777027609041083214241167067154846780379410457325384136774173540880680703437648293957784878985818376432013647415210955529162712672841319668120257447461567038004250028029752246949587461150846214998661348798142220559280403267581983191669260262076357617420472179861844334505141503479938585740507007167412328247901645653025038188426412803561167311075415186139406418297360055617953651023218144335111178729068397052382593835592142212067930715544738880011596139654527770961911784544010189290315677772431190278256579916333137165255075163459126978209678330136547554839703581615386678643718339211024128344190549574517564644382447611744798875041346881354781693931986615205673317996958906543168487424513288646586386898335386252942417294351991435595389041536593887748040184886941013614961741810729168951559211294246606230105751075721451317188926451002620849423314518170658209171671914315184519999959495351937563075042077266900864146159426562183965523296477064353921084645981585062809887031916148806349242025315612913825933164149679421566262446757892475611986630543538188150542432463200651189833933982458007114429715435568714619661080138790893459960671301328455259702189597680258358027148120577359065875450633562059381985788036798654456426180261922908112060328808638698523351620789566317389045953829508142189900185007810978556531031234520426854056485675147172190502028351264431318960694075186507102430581156550179324060430995652420952731818727684039692796018771140481392835706804763480391403219506727895338895364591606497253163676677638669786786858737497920439433198267927890300667623673919500396414839378381934354516285899285278671196050670328000271445003863863854641343057226519772851093922041622949244909881042639419520750870739146022239848882362576253955639971615811326995401478442990402656532205515168792715334542129193521733882886780427236290633270965571593377055933030570964314193668632743086843644521712276882644432083012275643889490106050284317873072564495246844741833922331897169054478543498374111011001360629887265387016903 b = 23842135454777432891743223391138265563241799870175456642327123278749657522050965688647025271946838603033997215457359121062031090678062337376719430593135764515364544052891212988546634081941717578522276652565205405071925932782899189391582928430745625545751168223235578140422316604775465116636679365817463642606682382103650151553859378443311951637645862682606805670610169631771916714125895199501221576523042203542953632992797 n = 11325979084644128572298911896847368512066889699114922766957825496829789701040409280284912163337390977205935027654824418075908113980923567819511384456223871894254826496727684822147076089401320253972280078822901143659851738555573580052473815798989309369428595758953805619194262607259107358103749807085316873971927412767250429330952340169403993890298557816024130952523480708504075717017477 c = 91637278981727419311704062766528605893241365739887714388981571071807672497690225964001055671982318124750997320763003521883860470498708606433206468782382765369836856610266602374015551078759628514665188339252922366320922478645026704734702460355236791287112842409076450962765866362852307351865564192898522584768904066046337899302561685937649000409332117647123
tempa = a coeff = [] A = [] for i inrange(6): temp = tempa % b ifint(temp).bit_length() > 32: k = temp - b coeff.append(k) else: k = temp coeff.append(k) tempa = (tempa - coeff[i]) // b A.append(tempa)
# print(coeff)
# mayA = sum([coeff[i]*b**i for i in range(6)]) # assert(mayA == a)
R.<m> = PolynomialRing(Zmod(n)) f = (((((coeff[5]*m + coeff[4])*m + coeff[3])*m + coeff[2])*m + coeff[1])*m + coeff[0]) - c res = f.roots() # print(res) for i in res: plain = long_to_bytes(int(i[0])) flag = b"NSSCTF{" + plain + b"}" print(flag) # NSSCTF{F1nd_4_M3th0d_70_COPPER5m1th!}
''' a = 5549997533567190765451060003378594328208085965171057613046272782399320385801262427125465925310587069826816190505343998268891453664853919954972318043604177749860432778530185933735996050024160286370510179686746394158379258246587487978911503057556662561587215910791569507689015766531668277131113986057590781396398336299292315557904756600303993655014781202374308079885517355500419820878630803963625154724593589268277135757575099029314373537333985928427361897778453968429622806601778705482232467565493789524705788745221275426482603133790789320192127238641529684801868328091692081269798378555677980295282241736002111769899269365161305274768242912746034221266737507823710607682307448305506469386320122162063129111963956813928790055972563594890074229166442357508298255754150913934863439503751818506701092029312330070104636530223422238884679342877228773018649571938389437053258838947075103547766682006907290041060099030401078504154580918834901230411520541473984503892569919351799880236285333890681120340758177935223362561618860440679402085624994947954310720781671847323988290985994849577007330168617301104973145130975458942852068773890456852008660678772797081769299221752824132395057925957966236190693386264986627705062247274388532481890731361579962994281795847973719352965725024336536011747744286094626784548450945808977185031072003163884715639335582500821735372264778337277968982744615544014751382104123657815885683865159874330848264901320900587726777026680111663529893241507534145907710815328515080873983547987954554660585289621642017226020909406358582195295944513518489513783744170261194300084082634297086645338918551616443632828664857206551814971287007726341429714596407033649324399745531577851802389713905682407743356548494218886990858323750912334486066574949941863337284447418868362349705104596997062541665923824132293441261853623963153677146052741893849156220411360012198280306111549261407941431691085949136294791896025980996617245031309439043593114299292206028201810212469726512376109348231607843056259556121448353511032010729667364764526544162088652166231118576736952880650975321889920727908566750809108688218503956 b = 19088700216864219992000481909154962955010217153589993304722719340884054355376558326105036947257582728860147557431276912919643940358478125733042829478349114754313750607492935206321298801011776939307313478546331523512938761672813983870399597182080005906066953602228332948790458576153448761425614070248334986663583719133564252378947422392557755444674008030141846366476287826338519233008704965899055639264609925259823048079319 n = 1698281899194715114165111012319277103359733674717346894156321734086384210027912893592223341535254583183189375047805019470712423207121454213625786296403115965465797639874678119529865412063714723513964182015925137173277042639307327631371055326412204990172328114832185024332076266014268385262996787504249248741895102659976146333218908476195041388126877183421158327681480273218635257896126985050902620483850502219753728842322424353423665711001628722961510508066740039 c = 53146904354859601599585110457067111012858829248246133531123405294986679458995718625053726629192021849150034273282207940006128865030953003797480171720673649060942787124637476440400908506795533118278613492356804275358218541297790334587524059713360959881377651255593428483947657195937373058321156413003347566693680573881827047037751088091600420762361729539354 '''
a = 5549997533567190765451060003378594328208085965171057613046272782399320385801262427125465925310587069826816190505343998268891453664853919954972318043604177749860432778530185933735996050024160286370510179686746394158379258246587487978911503057556662561587215910791569507689015766531668277131113986057590781396398336299292315557904756600303993655014781202374308079885517355500419820878630803963625154724593589268277135757575099029314373537333985928427361897778453968429622806601778705482232467565493789524705788745221275426482603133790789320192127238641529684801868328091692081269798378555677980295282241736002111769899269365161305274768242912746034221266737507823710607682307448305506469386320122162063129111963956813928790055972563594890074229166442357508298255754150913934863439503751818506701092029312330070104636530223422238884679342877228773018649571938389437053258838947075103547766682006907290041060099030401078504154580918834901230411520541473984503892569919351799880236285333890681120340758177935223362561618860440679402085624994947954310720781671847323988290985994849577007330168617301104973145130975458942852068773890456852008660678772797081769299221752824132395057925957966236190693386264986627705062247274388532481890731361579962994281795847973719352965725024336536011747744286094626784548450945808977185031072003163884715639335582500821735372264778337277968982744615544014751382104123657815885683865159874330848264901320900587726777026680111663529893241507534145907710815328515080873983547987954554660585289621642017226020909406358582195295944513518489513783744170261194300084082634297086645338918551616443632828664857206551814971287007726341429714596407033649324399745531577851802389713905682407743356548494218886990858323750912334486066574949941863337284447418868362349705104596997062541665923824132293441261853623963153677146052741893849156220411360012198280306111549261407941431691085949136294791896025980996617245031309439043593114299292206028201810212469726512376109348231607843056259556121448353511032010729667364764526544162088652166231118576736952880650975321889920727908566750809108688218503956 b = 19088700216864219992000481909154962955010217153589993304722719340884054355376558326105036947257582728860147557431276912919643940358478125733042829478349114754313750607492935206321298801011776939307313478546331523512938761672813983870399597182080005906066953602228332948790458576153448761425614070248334986663583719133564252378947422392557755444674008030141846366476287826338519233008704965899055639264609925259823048079319 n = 1698281899194715114165111012319277103359733674717346894156321734086384210027912893592223341535254583183189375047805019470712423207121454213625786296403115965465797639874678119529865412063714723513964182015925137173277042639307327631371055326412204990172328114832185024332076266014268385262996787504249248741895102659976146333218908476195041388126877183421158327681480273218635257896126985050902620483850502219753728842322424353423665711001628722961510508066740039 c = 53146904354859601599585110457067111012858829248246133531123405294986679458995718625053726629192021849150034273282207940006128865030953003797480171720673649060942787124637476440400908506795533118278613492356804275358218541297790334587524059713360959881377651255593428483947657195937373058321156413003347566693680573881827047037751088091600420762361729539354
tempa = a coeff = [] A = [] for i inrange(6): temp = tempa % b ifint(temp).bit_length() > 32: k = temp - b coeff.append(k) else: k = temp coeff.append(k) tempa = (tempa - coeff[i]) // b A.append(tempa)
# print(coeff)
# mayA = sum([coeff[i]*b**i for i in range(6)]) # assert(mayA == a)
R.<m> = PolynomialRing(Zmod(n)) f = (((((coeff[5]*m + coeff[4])*m + coeff[3])*m + coeff[2])*m + coeff[1])*m + coeff[0]) - c res = f.monic().small_roots(X=2^232) # print(res) for i in res: plain = long_to_bytes(int(i)) flag = b"NSSCTF{" + plain + b"}" print(flag) # NSSCTF{F1nd_4_M3th0d_70_COPPER5m1th!}