inv_mult = None for x inrange(26): if (exp_factor * x) %26 ==1: inv_mult = x break if inv_mult isNone: raise ValueError("No inverse found") res = "" for c in hint: if c in"LITCTF{_}": res += c else: idx_ct = ord(c) - ord('a') idx_pt = (idx_ct * inv_mult) %26 res += chr(idx_pt + ord('a')) return res
hint = "LITCTF{fkxlafg_plk_qkuxbkgp_hucknkxk_khkx}" flag = decrypt_power(hint) print(flag)
n = 28720310163698579785590409431244488502590518896114002560615035101872706254575673226701273452266044763379371347175490772833687557638193161203442701390842338726680883158060043516615180759468749002859934101042225109339060841430076215460950001496422014817369538803906181940671644497607497588494548107578139030246710304659121835681466614082387895636652987625506231425635937025960541486880824071903428563319272223449602650009455406871550491147456125891228766395361048688453313744200332284228661669385987688182529904303370060855844163590429388043008170533746319606379457862846257781629063966348729803646974228947658975816397
from Crypto.Util.number import long_to_bytes as ltb, bytes_to_long as btl, getPrime
import os
p = getPrime(1024)
q = getPrime(1024)
flag = btl(b'LITCTF{[redacted]}' + os.urandom(32))
print("Xor cipher:")
print(flag^p)
print(flag^q)
print("RSA:")
e = 65537
N = p*q
print(e,N)
print(pow(flag, e, N))
flag ^ p = 108045183697150150388387022354644400710478293913561934644429795432215423775530425605908182580593052688767602845916543591389876983482042029936174739737106705637912307780034509466169441898226514099166553884646148238091201176833192660464799051971513299469099698642852622112851519420837770557753663006410171424954
flag ^ q = 162425027220271125112526550171672938857893430024995932152889092099422586505033382180804478364393931237258447320092961243322668725158329284375314631413196322424161078014098879996836910267428123607993248647460893768237405563780856627795204647838831725719393299863570484674672516697933717612728478431715684934592
n = 17549241903028807175848697296476902180173000665558251909525417072566389777554685273914493627088689101480604403676280727929113896976807159352508389369627695539558624802791339988787869402402630026664052058891704214906198713997370416403885783996622003881424532493528115742721432687906907253783461267540168556557474688342693447888469393204411905072363126771586961835579420717423443143174165744502775543261555553300815721003846650007143264701287458594708569998427388990790314519857410381171087321730943418024966767600200818019264395953839395615095086827909298793968510748073265397345829272224944838568259203556901938490251
c = 15771531968759255206472217913622670911079136848159367178271327606545875119033854273178826969494590977340221396142610245587819870438040088763642130539085898823155632887807140504582510904126243920797047908446371848070010831250500867803653544089236908734881494176567631239714888177579409037101004801324365329294451645055770640691767024180084714636110900526184856411276742567769773926457049290824684230273083289562143369775700813949916517084557583295679402702854150346124209715938583306569988576420229217836860768395518641691096169891458896583547743891498844372591813522456434048363032013126358398207594342936230289578536
给了两个等式
1 2 3
flag ^ p = 108045183697150150388387022354644400710478293913561934644429795432215423775530425605908182580593052688767602845916543591389876983482042029936174739737106705637912307780034509466169441898226514099166553884646148238091201176833192660464799051971513299469099698642852622112851519420837770557753663006410171424954
flag ^ q = 162425027220271125112526550171672938857893430024995932152889092099422586505033382180804478364393931237258447320092961243322668725158329284375314631413196322424161078014098879996836910267428123607993248647460893768237405563780856627795204647838831725719393299863570484674672516697933717612728478431715684934592
n = 17549241903028807175848697296476902180173000665558251909525417072566389777554685273914493627088689101480604403676280727929113896976807159352508389369627695539558624802791339988787869402402630026664052058891704214906198713997370416403885783996622003881424532493528115742721432687906907253783461267540168556557474688342693447888469393204411905072363126771586961835579420717423443143174165744502775543261555553300815721003846650007143264701287458594708569998427388990790314519857410381171087321730943418024966767600200818019264395953839395615095086827909298793968510748073265397345829272224944838568259203556901938490251
c = 15771531968759255206472217913622670911079136848159367178271327606545875119033854273178826969494590977340221396142610245587819870438040088763642130539085898823155632887807140504582510904126243920797047908446371848070010831250500867803653544089236908734881494176567631239714888177579409037101004801324365329294451645055770640691767024180084714636110900526184856411276742567769773926457049290824684230273083289562143369775700813949916517084557583295679402702854150346124209715938583306569988576420229217836860768395518641691096169891458896583547743891498844372591813522456434048363032013126358398207594342936230289578536
import sys
import gmpy2
sys.setrecursionlimit(3000)
gift = p_q
N = n
deffindp(p,q):
iflen(p) == 1024:
pp = int(p,2)
if N % pp == 0:
print("p = ",pp)
print("q = ",N // pp)
else:
l = len(p)
pp = int(p,2)
qq = int(q,2)
if (pp ^ qq) % (2 ** l) == gift %(2**l) and pp * qq %(2 ** l) == N % (2**l):
findp('1' + p,'1' + q)
findp('1' + p,'0' + q)
findp('0' + p,'1' + q)
findp('0' + p,'0' + q)
findp('1','1')
p = 108045183697150150388387022354644400710478293913561934644429795432215423775530425605908182580593052688767602845916543591389876983486365655433122184730638261805104817521990528440087160333620946042644532377495148124034395624084891184068389351273643076713603146320842702638033574169713784743740616625029744269901