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 prefix = b"NSSCTF{" suffix = b"}" length = 78 - len(prefix) - len(suffix)
#part1 remove prefix and suffix c -= 256^(len(suffix) + length) * bytes_to_long(prefix) c -= bytes_to_long(suffix) c = c * inverse(256,p) % p
L = Matrix(ZZ,length+2,length+2) for i inrange(length): L[i,i] = 1 L[i,-1] = 256^i c -= 256^i*48
L[-2,-2] = 4 L[-2,-1] = -c L[-1,-1] = p L[:,-1:] *= p res = L.BKZ() flag = "" for i in res[:-1]: if(abs(i[-2]) == 4andall(abs(j) < 8for j in i[:-2])): for j in i[:-2][::-1]: flag += chr(48 + abs(j)) 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
#part1 remove prefix and suffix c -= 256^(len(suffix) + length) * bytes_to_long(prefix) c -= bytes_to_long(suffix) c = c * inverse(256,p) % p
L = Matrix(ZZ,length+2,length+2) for i inrange(length): L[i,i] = 1 L[i,-1] = 256^i c -= 256^i*48 c -= 256^i*3
L[-2,-2] = 1 L[-2,-1] = -c L[-1,-1] = p L[:,-1:] *= p res = L.BKZ()
flag = "" for i in res[:-1]: if(all(abs(j) <= 4for j in i[:-2])): if(i[-2] == 1): for j in i[:-2][::-1]: flag += chr(48 + 3 + j) else: for j in i[:-2][::-1]: flag += chr(48 + 3 - j) if(flag != ""): print(flag)
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 '''
p = 421384892562377694077340767015240048728671794320496268132504965422627021346504549648945043590200571 c = 273111533929258227142700975315635731051782710899867431150541189647916512765137757827512121549727178
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 '''
题目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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 '''
from Crypto.Util.number import * from random import *
p = 2271129678202363707972156644097566224560370806295266873816026779022614695317611229903770390498322537051358521932851893609555063610221 c = 244176818026839545554951436126300508547217557099550914232243928051857553603712968234687200629719468115535825237511413058786560692170 table = [ord(i) for i in"AEGM"]
#part1 linear transformation and remove prefix and suffix a = 1 * inverse(table[1]-table[2],p) b = (1 - a*table[1]) % p prefix = b"NSSCTF{" suffix = b"}" length = 108 - len(prefix) - len(suffix) c -= 256^(len(suffix) + length) * bytes_to_long(prefix) c -= bytes_to_long(suffix) c = c * inverse(256,p) % p c = a*c % p
#part2 BKZ
L = Matrix(ZZ,length+2,length+2) for i inrange(length): L[i,i] = 1 L[i,-1] = 256^i c += 256^i*b c %= p
L[-2,-2] = 1 L[-2,-1] = -c L[-1,-1] = p L[:,-1:] *= p res = L.BKZ()
flag = "" for i in res[:-1]: if(all(abs(j) <= 3for j in i[:-2])): if(1in i): for j in i[:-2][::-1]: if(j == 1): flag += "E" elif(j == 3): flag += "A" elif(j == 0): flag += "G" else: flag += "M" else: for j in i[:-2][::-1]: if(j == -1): flag += "E" elif(j == -3): flag += "A" elif(j == 0): flag += "G" else: flag += "M" print(flag)
''' a = 5549997533567190765451060003378594328208085965171057613046272782399320385801262427125465925310587069826816190505343998268891453664853919954972318043604177749860432778530185933735996050024160286370510179686746394158379258246587487978911503057556662561587215910791569507689015766531668277131113986057590781396398336299292315557904756600303993655014781202374308079885517355500419820878630803963625154724593589268277135757575099029314373537333985928427361897778453968429622806601778705482232467565493789524705788745221275426482603133790789320192127238641529684801868328091692081269798378555677980295282241736002111769899269365161305274768242912746034221266737507823710607682307448305506469386320122162063129111963956813928790055972563594890074229166442357508298255754150913934863439503751818506701092029312330070104636530223422238884679342877228773018649571938389437053258838947075103547766682006907290041060099030401078504154580918834901230411520541473984503892569919351799880236285333890681120340758177935223362561618860440679402085624994947954310720781671847323988290985994849577007330168617301104973145130975458942852068773890456852008660678772797081769299221752824132395057925957966236190693386264986627705062247274388532481890731361579962994281795847973719352965725024336536011747744286094626784548450945808977185031072003163884715639335582500821735372264778337277968982744615544014751382104123657815885683865159874330848264901320900587726777026680111663529893241507534145907710815328515080873983547987954554660585289621642017226020909406358582195295944513518489513783744170261194300084082634297086645338918551616443632828664857206551814971287007726341429714596407033649324399745531577851802389713905682407743356548494218886990858323750912334486066574949941863337284447418868362349705104596997062541665923824132293441261853623963153677146052741893849156220411360012198280306111549261407941431691085949136294791896025980996617245031309439043593114299292206028201810212469726512376109348231607843056259556121448353511032010729667364764526544162088652166231118576736952880650975321889920727908566750809108688218503956 b = 19088700216864219992000481909154962955010217153589993304722719340884054355376558326105036947257582728860147557431276912919643940358478125733042829478349114754313750607492935206321298801011776939307313478546331523512938761672813983870399597182080005906066953602228332948790458576153448761425614070248334986663583719133564252378947422392557755444674008030141846366476287826338519233008704965899055639264609925259823048079319 n = 1698281899194715114165111012319277103359733674717346894156321734086384210027912893592223341535254583183189375047805019470712423207121454213625786296403115965465797639874678119529865412063714723513964182015925137173277042639307327631371055326412204990172328114832185024332076266014268385262996787504249248741895102659976146333218908476195041388126877183421158327681480273218635257896126985050902620483850502219753728842322424353423665711001628722961510508066740039 c = 53146904354859601599585110457067111012858829248246133531123405294986679458995718625053726629192021849150034273282207940006128865030953003797480171720673649060942787124637476440400908506795533118278613492356804275358218541297790334587524059713360959881377651255593428483947657195937373058321156413003347566693680573881827047037751088091600420762361729539354 '''
a = 5549997533567190765451060003378594328208085965171057613046272782399320385801262427125465925310587069826816190505343998268891453664853919954972318043604177749860432778530185933735996050024160286370510179686746394158379258246587487978911503057556662561587215910791569507689015766531668277131113986057590781396398336299292315557904756600303993655014781202374308079885517355500419820878630803963625154724593589268277135757575099029314373537333985928427361897778453968429622806601778705482232467565493789524705788745221275426482603133790789320192127238641529684801868328091692081269798378555677980295282241736002111769899269365161305274768242912746034221266737507823710607682307448305506469386320122162063129111963956813928790055972563594890074229166442357508298255754150913934863439503751818506701092029312330070104636530223422238884679342877228773018649571938389437053258838947075103547766682006907290041060099030401078504154580918834901230411520541473984503892569919351799880236285333890681120340758177935223362561618860440679402085624994947954310720781671847323988290985994849577007330168617301104973145130975458942852068773890456852008660678772797081769299221752824132395057925957966236190693386264986627705062247274388532481890731361579962994281795847973719352965725024336536011747744286094626784548450945808977185031072003163884715639335582500821735372264778337277968982744615544014751382104123657815885683865159874330848264901320900587726777026680111663529893241507534145907710815328515080873983547987954554660585289621642017226020909406358582195295944513518489513783744170261194300084082634297086645338918551616443632828664857206551814971287007726341429714596407033649324399745531577851802389713905682407743356548494218886990858323750912334486066574949941863337284447418868362349705104596997062541665923824132293441261853623963153677146052741893849156220411360012198280306111549261407941431691085949136294791896025980996617245031309439043593114299292206028201810212469726512376109348231607843056259556121448353511032010729667364764526544162088652166231118576736952880650975321889920727908566750809108688218503956 b = 19088700216864219992000481909154962955010217153589993304722719340884054355376558326105036947257582728860147557431276912919643940358478125733042829478349114754313750607492935206321298801011776939307313478546331523512938761672813983870399597182080005906066953602228332948790458576153448761425614070248334986663583719133564252378947422392557755444674008030141846366476287826338519233008704965899055639264609925259823048079319 n = 1698281899194715114165111012319277103359733674717346894156321734086384210027912893592223341535254583183189375047805019470712423207121454213625786296403115965465797639874678119529865412063714723513964182015925137173277042639307327631371055326412204990172328114832185024332076266014268385262996787504249248741895102659976146333218908476195041388126877183421158327681480273218635257896126985050902620483850502219753728842322424353423665711001628722961510508066740039 c = 53146904354859601599585110457067111012858829248246133531123405294986679458995718625053726629192021849150034273282207940006128865030953003797480171720673649060942787124637476440400908506795533118278613492356804275358218541297790334587524059713360959881377651255593428483947657195937373058321156413003347566693680573881827047037751088091600420762361729539354
k1 = a // b a1 = a % b K = [k1+1] A = [a1-b] while(K[-1] > b): tempa = K[-1] % b tempk = K[-1] // b if(tempa > 2^35): A.append(tempa - b) K.append(tempk + 1) else: A.append(tempa) K.append(tempk) print(A) PR.<x> = PolynomialRing(Zmod(n)) f = K[4]*x^5 + A[4]*x^4 + A[3]*x^3 + A[2]*x^2 + A[1]*x^1 + A[0] - c f = f.monic() res = f.small_roots(X=256^29,beta=5/6) print(res)
PR.<x> = PolynomialRing(Zmod(n)) for i in tqdm(possible_i): f = ph + (last*num)*x + i f = f.monic() res = f.small_roots(X = (2^bits // (last*num)) , beta=0.499,epsilon=0.01) if(res != []): p = int(ph + (last*num)*int(res[0]) +i) q = n // p m = pow(c,(inverse(65537,(p-1)*(q-1))),n) print(long_to_bytes(int(m))) break
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 Crypto.Util.number import * from Crypto.Util.Padding import * from Crypto.Cipher import AES from hashlib import sha256
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'
p = n // (GCD(pow(2,hint//7**3,n)-1,n)) q = n // GCD(pow(2,hint//248701**3,n)-1,n) r = n // p // q
key = sha256(str(p+q+r).encode()).digest() enc = AES.new(key, AES.MODE_ECB) flag = enc.decrypt(c)
from Crypto.Util.number import * from gmpy2 import * from tqdm import *
n = 20304817598463991883487911425007927214135740826150882692657608404060781116387976327509281041677948119173928648751205240686682904704601086882134602075008186227364732648337539221512524800875230120183740426722086488143679856177002068856911689386346260227545638754513723197073169314634515297819111746527980650406024533140966706487847121511407833611739619493873042466218612052791074001203074880497201822723381092411392045694262494838335876154820241827541930328508349759776586915947972105562652406402019214248895741297737940426853122270339018032192731304168659857343755119716209856895953244774989436447915329774815874911183 e = 65537 c = 7556587235137470264699910626838724733676624636871243497222431220151475350453511634500082904961419456561498962154902587302652809217390286599510524553544201322937261018961984214725167130840149912862814078259778952625651511254849935498769610746555495241583284505893054142602024818465021302307166854509140774804110453227813731851908572434719069923423995744812007854861031927076844340649660295411912697822452943265295532645300241560020169927024244415625968273457674736848596595931178772842744480816567695738191767924194206059251669256578685972003083109038051149451286043920980235629781296629849866837148736553469654985208 leak = 1511538174156308717222440773296069138085147882345360632192251847987135518872444058511319064
#part1 factor n by Fermat's_factorization_method(adding bruteforce) sumhigh = 2*iroot(n,2)[0] >> 325 << 325 for i in trange(2**25): pplusq = sumhigh + 2**300*i + leak if((pplusq)**2 > 4*n): temp = iroot((pplusq)**2-4*n,2) if(temp[1]): p_q = temp[0] p = (pplusq + p_q) // 2 q = n // p break
#part2 get flag phi = (p-1)*(q-1) d = inverse(e,phi) print(long_to_bytes(pow(c,d,n)))
from Crypto.Util.number import * from tqdm import *
e = 65537 m1 = 23145761572719481962762273155673006162798724771853359777738044204075205506442533110957905454673168677138390288946164925146182350082798412822843805544411533748092944111577005586562560198883223125408349637392132331590745338744632420471550117436081738053152425051777196723492578868061454261995047266710226954140246577840642938899700421187651113304598644654895965391847939886431779910020514811403672972939220544348355199254228516702386597854501038639792622830084538278039854948584633614251281566284373340450838609257716124253976669362880920166668588411500606044047589369585384869618488029661584962261850614005626269748136 m2 = 21293043264185301689671141081477381397341096454508291834869907694578437286574195450398858995081655892976217341587431170279280993193619462282509529429783481444479483042173879669051228851679105028954444823160427758701176787431760859579559910604299900563680491964215291720468360933456681005593307187729279478018539532102837247060040450789168837047742882484655150731188613373706854145363872001885815654186972492841075619196485090216542847074922791386068648687399184582403554320117303153178588095463812872354300214532980928150374681897550358290689615020883772588218387143725124660254095748926982159934321361143271090861833 sum1 = 309575642078438773208947649750793560438038690144069550000470706236111082406 sum2 = 303394719183577651416751448350927044928060280972644968966068528268042222965 n = 4597063839057338886607228486569583368669829061896475991448013970518668754752831268343529061846220181652766402988715484221563478749446497476462877699249731 c = 3253873276452081483545152055347615580632252871708666807881332670645532929747667442194685757039215506084199053032613562932819745309368748317106660561209205
if(1): for i in trange(1000): for j inrange(1000): sum1_ = sum1*1000+i sum2_ = sum2*1000+j kp_1 = GCD(m1-sum1_,m2-sum2_) if(kp_1 > 2**255): for k inrange(1,10000): if(kp_1 % k == 0): p = kp_1 // k + 1 if(isPrime(p) andlen(bin(p)[2:]) == 256): q = n // p break
d = inverse(e,(p-1)*(q-1)) print(long_to_bytes(pow(c,d,n)))
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 = getPrime(256) q = getPrime(256) n = p*q phi = (p-1)*(q-1) e = 65537 d = inverse(e,phi)
key = sha256(str(p+q).encode()).digest() enc = AES.new(key, AES.MODE_ECB) c = enc.encrypt(pad(flag,16)) hint = getPrime(20)*d**3 + getPrime(128)*phi**2
''' n = 8218998145909849489767589224752145194323996231101223014114062788439896662892324765430227087699807011312680357974547103427747626031176593986204926098978521 c = b'\x9a \x8f\x96y-\xb4\tM\x1f\xe6\xcc\xef\xd5\x19\xf26`|B\x10N\xd7\xd0u\xafH\x8d&\xe3\xdbG\x13\x8e\xea\xc0N\n\r\x91\xdc\x95\x9b\xb1Ny\xc1\xc4' hint = 1860336365742538749239400340012599905091601221664081527583387276567734082070898348249407548568429668674672914754714801138206452116493106389151588267356258514501364109988967005351164279942136862087633991319071449095868845225164481135177941404709110974226338184970874613912364483762845606151111467768789248446875083250614540611690257121725792701375153027230580334095192816413366949340923355547691884448377941160689781707403607778943438589193122334667641037672649189861 '''
from Crypto.Util.number import * from Crypto.Util.Padding import * from Crypto.Cipher import AES from hashlib import sha256 from gmpy2 import * from tqdm import *
n = 8218998145909849489767589224752145194323996231101223014114062788439896662892324765430227087699807011312680357974547103427747626031176593986204926098978521 c = b'\x9a \x8f\x96y-\xb4\tM\x1f\xe6\xcc\xef\xd5\x19\xf26`|B\x10N\xd7\xd0u\xafH\x8d&\xe3\xdbG\x13\x8e\xea\xc0N\n\r\x91\xdc\x95\x9b\xb1Ny\xc1\xc4' hint = 1860336365742538749239400340012599905091601221664081527583387276567734082070898348249407548568429668674672914754714801138206452116493106389151588267356258514501364109988967005351164279942136862087633991319071449095868845225164481135177941404709110974226338184970874613912364483762845606151111467768789248446875083250614540611690257121725792701375153027230580334095192816413366949340923355547691884448377941160689781707403607778943438589193122334667641037672649189861
e = 65537
#part1 get a if(0): for a in trange(2**20): if(not isPrime(a)): continue if(powmod(2,e**3*hint-a,n) == 1): print(a) break a = 565237
#part2 factor n kphi = e**3*hint - a t = 3**3 p = GCD(pow(2,kphi//t,n)-1,n) q = n // p
#part3 get flag key = sha256(str(p+q).encode()).digest() enc = AES.new(key, AES.MODE_ECB) flag = enc.decrypt(c) print(flag)
#NSSCTF{H0w_70_F4ct0R_N_7h1s_tim3?}
other
总体介绍:一些其他零碎知识点的杂烩。
easy_NTRU
题目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
from Crypto.Util.number import * from secret import flag
assert flag.startswith(b"NSSCTF{") and flag.endswith(b"}") assertb"!!NSSCTF!!"in flag assertlen(flag)==65
f = bytes_to_long(flag) p = getPrime(512) g = getPrime(128) h = inverse(f,p) * g % p