from Crypto.Util.number import * from libnum import *
flag = b'NSSCTF{******}' + b'1010101010101010101010101010101010101010100010101010101010101010101101' p = getPrime(512) q = getPrime(512) n = p*q e = 65537 d = inverse(e, (p-1)*(q-1)) dp = d % (p-1) m = s2n(flag) c = pow(m, e, n) print(f'n = {n}') print(f'c = {c}') print(f'dp = {dp}')
''' n = 62950660589752377241535942010457460675378335694404721223426371627802159493655570041534480026979837056215567303530448462076388942749116962945931432723672826148999814815864738069663127706046027850586024555861960247057288826014343547293035737544457656904257388300461848219257240252715837662741274235378360898441 c = 26392919777656338278184497106215581599692023606797351841011065350738534402079717897589592521000832026751736045905247050532819571969784687491977953157313304550096179520376626220816081159472339787295872214912587497324709488986746768994907107727184468228540635002062232484115731701648311946527233449512543132274 dp = 7088497034630351463006975624795947102639056977565074157092915907376477955247769847204254053775159112398217033648894620506901638351932922911273150932128973 '''
from Crypto.Util.number import long_to_bytes import gmpy2
n = 62950660589752377241535942010457460675378335694404721223426371627802159493655570041534480026979837056215567303530448462076388942749116962945931432723672826148999814815864738069663127706046027850586024555861960247057288826014343547293035737544457656904257388300461848219257240252715837662741274235378360898441 c = 26392919777656338278184497106215581599692023606797351841011065350738534402079717897589592521000832026751736045905247050532819571969784687491977953157313304550096179520376626220816081159472339787295872214912587497324709488986746768994907107727184468228540635002062232484115731701648311946527233449512543132274 dp = 7088497034630351463006975624795947102639056977565074157092915907376477955247769847204254053775159112398217033648894620506901638351932922911273150932128973 e = 65537
defdp_leak(dp,c,n,e): for i inrange(1,e): t = (dp * e - 1) % i if t == 0: p = (dp * e - 1) // i + 1 if n % p == 0: q = n // p d = gmpy2.invert(e,(p-1)*(q-1)) print(long_to_bytes(pow(c,d,n))) dp_leak(dp,c,n,e) #NSSCTF{CTFCTFNSSNSS}
''' p = 158805288384650271811274620112885426807134870587281058486409657841571541118874370262125616758392586636436387032461169543181918821693975663497124408432536495676514953509756505781488235396628730376794651046582155886825258656047349260441547239700695773934518441411466809921946609164932234396841476405798428700843 a = 6782997653971692606019358747667066963688636909392719204001155907616272998599567932030340899158310591583056298423803386927289244122405887173827359025095219 b = 7373784501270128110088353737302182289453185058537147667058852830178883492374394182313086562761123093282613985656842374554466162992585768060168515936322837 c = 12604317328077074383094898759023155531982085126299017370476099122695860476733267706510100804874716354025394150676456477445303955715981977583036765619931291 d = 8651550199315105291497863570314512750737000678752642987669418859342691686702373116147125246177399639155277789016646392989483699799276013474039473014389069 e = 6819653219987864110332165353640553980353581969662542365282269257622467162685937603557862048653003559950780009596692439320585574228684924030626160305559221 y = 187626421635118933741196210961559541641107643327742932086152135660947241144749750951157691964883138108211067837818748515766812840026814947057023367814232867155997328882540000727585104081833734697954005690818776434169815240704563337 h = 36198427687223295973782557044383345640934859884880641150183916728479006412929786917944908958646498915497129126843345300628359 '''
#sage import gmpy2 p = 158805288384650271811274620112885426807134870587281058486409657841571541118874370262125616758392586636436387032461169543181918821693975663497124408432536495676514953509756505781488235396628730376794651046582155886825258656047349260441547239700695773934518441411466809921946609164932234396841476405798428700843 a = 6782997653971692606019358747667066963688636909392719204001155907616272998599567932030340899158310591583056298423803386927289244122405887173827359025095219 b = 7373784501270128110088353737302182289453185058537147667058852830178883492374394182313086562761123093282613985656842374554466162992585768060168515936322837 c = 12604317328077074383094898759023155531982085126299017370476099122695860476733267706510100804874716354025394150676456477445303955715981977583036765619931291 d = 8651550199315105291497863570314512750737000678752642987669418859342691686702373116147125246177399639155277789016646392989483699799276013474039473014389069 e = 6819653219987864110332165353640553980353581969662542365282269257622467162685937603557862048653003559950780009596692439320585574228684924030626160305559221 y = 187626421635118933741196210961559541641107643327742932086152135660947241144749750951157691964883138108211067837818748515766812840026814947057023367814232867155997328882540000727585104081833734697954005690818776434169815240704563337 h = 36198427687223295973782557044383345640934859884880641150183916728479006412929786917944908958646498915497129126843345300628359
R.<x> = PolynomialRing(Zmod(p)) f = a*x^4 + b*x^3 + c*x^2 + d*x + e - y
x = f.monic().small_roots(X=2^64,beta=0.4) print(x)
x = 12896387745855437651 m = h // x print(bytes.fromhex(hex(m)[2:])) # NSSCTF{05223898-4a23-11ee-ae75-c03c59457d4d}
list = [] for i in table1: ifnot (i in table2): list.append(i)
print(list)
for i inlist: for j inlist: if i != j: for k inlist: if i != k and j != k: for n inlist: if i != n and j != n and k != n: pad = '' + i + j + k + n table2 = "o57gjn0Sb9ETqVLYOJyHX42kNaIhrWlU" + pad + "eszCfD+dtPm1u3AMKpwRGvcxQZ8B" flag = base64.b64decode(cipher.translate(str.maketrans(table2,table1))) ifb"NSSCTF"in flag: print(flag) break #NSSCTF{WIKEY_GivE_u_this_f1ag}
t = gmpy2.iroot(n,2)[0] p = gmpy2.next_prime(t) q = n // p d = gmpy2.invert(e,(p-1)*(q-1)) m = pow(c,d,n) print(long_to_bytes(m)) #NSSCTF{1d518f8b-5878-11ee-acac-c03c59457d4d}
from Crypto.Util.number import * flag = b'NSSCTF{******}' p = getPrime(512) q = getPrime(512) n = p*q e = getPrime(128) d = inverse(e, (p-1)*(q-1)) dp = d % (p-1) m = bytes_to_long(flag) c = pow(m, e, n)
''' n = 92288362151232755164303382554034496430634785857894506752180261103500715219090974532177552845107426542175470207920267802066773828210866572070045093611090322738109527534622730588618668861998969946471756352024368486322527057077613762697792913167023012077178671066981439295386486943067698150993422039585259179729 e = 229991316986730339421575788374847647237 c = 66178170892880340054212366602556925884485962775832591797127163461420023986798822926684824340567060840259672460835004142425374706821346941926520921852009455818529825976414766339170445233789109526300838535719649346266975388774091834431039678689254534566870194580604694419819400454951059125553501095973278807456 dp = 8987556601717285362487353965045062789633142861774364363374961991445049127918653163458814169532860957264061203394944931114888144611267605606197232438332289 '''
for i in c: a.append(i.split('/')[0]) b.append(i.split('/')[1]) flag = ""
for i inrange(len(c)): if b[i] == "3"or b[i] == "2": flag += chr(int(a[i])) if b[i] == "1": if i % 2 == 0: flag += chr(int(a[i]) * 2) else: flag += chr(int(a[i]) * 3)