a = b'Og9hNAFrCjU9aQ4+C2psLzxpYRE6azw+FmphPgk2EjQBDyw+DWsKIQIPHiwAaBYoOx8wNBU2aGU=' b = base64.b64decode(a) c = str(b,encoding='utf-8') print(c) for xor inrange(0,256): d = "".join([chr(ord(i)^xor) for i inlist(c)]) print(d)
p = 702642074436764837683441695539 a = 1086077784009247 b = 862805818180723 cipher = [609157021623541347403691228214, 296649570588624720860438742570, 56199496972820506761619039889, 95133897800551968959628311224] _long = [] _flag = [] defenc_block(m): return (a * m + b) % p
defdec_block(m): n = m - b while(int(n) % int(a) != 0): n += p _long.append(n // a)
defbytes_to_long(s): res = 0 for i in s: res *= 256 res += i return res
deflong_to_bytes(s): while s != 0: c = s % 256 _flag.append(c) s -= c s //= 256
for i in cipher: dec_block(i) for i in _long: i = long_to_bytes(i) for i in _flag: print(chr(i),end='') print()
1
flag: moectf{Integers_@re_W0nderful}
rsa_begin
该有的都有了,网上的题解满天飞,顺手推一下我们的云影安全微信公众号(狗头
sol.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
from gmpy2 import * from Crypto.Util.number import * # from flag import flag
c = 12786994906832886031173089454539830225421640443805160963440942546071910322282773910135388020414967368794768319321460372875327006020157548651622969466323905189761834455201291838045352561790791600881627927594863932384116760236609096504346833060291203939690475993692410973499329433726175351882818053841075210942250478835641657575946226612389154039920962506062857726362447590070697348315291411570674334126096132112365825105842643843896421848410966564321518660727994853036555116782763422065173850238826345797198901647320210828033061322523971939726188821545177029535860881611210887039411052848607563035583276075332653567834 p = 161719691876167304386300539654699854745688262478039691942271426308613132466937889105173933022986654040443219708318126579048996288583272346602042650222520127626611975688909019632479930508343350314542889627461529623000987307169157443265879212155437165660477850241678385286601587538517091605374764970915451201471 q = 131679150542057883837006988923642169851011066771905140540444762603374903776910595387305441746623070810587630852182725227845916400198693359271062585498062084740896090668288333576457754165324164735966791029516030696195703650691726650990903496820364700241229117883279657833543807874786274886417501405960125022153 n = 21295111652177049852547386222656846645616549922902112221240647622752994625687294739828756977846793220378085163155773051922086862363248151399852421844018730199066331944608000906761112010951655369036878807145188296884981895884278542857120225505310980291226351653588799242142355376939447934804833830853036785704513557039806761305316841740131204576974408869765714675230132247412774215945663807730855436503625577606009921411947891570324777735323489304604987902364932089976811865007609745513534209603256719511305317200247134396733168695387708420206468160279271453425776388025425790010391137010735121696446552257334341187063 e = 65537 fn = (p-1) * (q-1)
from gmpy2 import * from Crypto.Util.number import *
p = 271025496017434332035320753340939587753 q = 187062615477826075738455044071781085709 r = 264397348115983548873673645475684815267 e = 14436419940785226047
from gmpy2 import * from Crypto.Util.number import *
n = 15274905724187007976062688111694208171648245755926549723930848331679370559382277309531883193568893950618537696621973335715700448284819087159038713951851073149185059446912643737897880614890160880188620908714690264385997668798598389032843113850150234625318214472029794048309337944915760403977123127640741083061552842650243876818145471482782844942192939655496977995968249462959762107837545653910780501609410891704623755469701321490811972540402711220544261239624303000287494271883971664842734435125499746514235466736472849516113471303106458562434410438884653988546034083582407195140859293841032731147334776795622031282337 c = 7649873402645557904267318087204875676435882168796613316947771411609304536744042271054002728333680669285687627190582808948237918163341052473768906643435100209262290073776103059228983982708395050561155725257946981193880353145980419181148155547397493995821331967887083756241716647822351384179244060471199391747247330626972048194624897878342927011604047320501737138088098886160729919147364903324687064902431207489782684719866060626978706852094198695277585012692022694665155389477850250459470673339445457036367744618480100621696259061108892762604574152145934126164545321261689749666332036548040709163385969039424795114798 e = 65537 qwq = 136383086823098285500559715282984001532573622820772765392239717247137237137341761692248957085436553130522658005553333354604468288257313278205702803141527438832009459347434319088373934061519293573112686684952591646303550614273199902078956373662055666297484057785980304002761945936747860749795742211078045384475927861288347886650709611481381810997147044818139672858846272475970913014053853869202882345022377291447526811470070434720728876836913344962560289448011351932763985591362052051400141727936920979500079923065746957505390028959028016923551115667081325793801590895434210158036784591723251672614624035408035726128
d = inverse(e,qwq) d = d // gcd(qwq,d) print(gcd(qwq,d))
from gmpy2 import * from Crypto.Util.number import *
c = 4448609753611737184783460118930573289974694828209309175709949628465223463405042537603307361264761380400800350729175604496885732375438319175307011826514239216844042845183325716835960262669255068613919692934369346218209713074470153225198829274586356256625802581378453700430995893798833625329886795030977601102315708416972421382472094601951556773175452075331439121107255232114811021725981668874569161063548983009784894416802911422859936359527482179901438086738326065526817697057803865158059963425602001042753756386164877391445821738133062042393332307186524909204126104658874232514066187286573576444075900795178016884461229586058251765908406312947283296549422962032951453806059978614112639366858737616956050597703536432152195980016832543565107903030313390118042295315068984272529539696018361520511026902310387433645917417048944557075704198152942755292614975227076165842566871076387574381219659759554381960975806672100713624265645 dc = 4309364092091276388004718814102373553758980405817595679564074805153803411597209984472887910928838871439616337549817714231235995002349688101757956086314510197676354800597513087069272391935644254109136020957742504477468917529533637783598686192029088455752051601994770096972887977072952830171524146576714713502392664215692986646580843840303793878982584144644461159568931881588661756617717236884047105112888668648146085473657815040008134047308021734053728606524063506802175439005328642429159744216509543042159848740769165565673410747859836374160557014359965487933469822407200828390566264453086213027820399525489653073934351074166844643531380375787825536559792929397263081185360290665106662493622257356673769350619066454911986660848940520828757576389225105604313249568540781542345773967776633630823614537884871302450446987591091071183429649635305050366645973091463546902372443777545374881273351758466627834180698108933752834817285 n = 4614906805424062812904180777200626046851600804405428869320812834275160358610245198952889965237539464660657424060388577114957090724061303957724139453224008409554575380917602175702589416351163348116539369954124434724030360077640773011962121222393438345287763424336034763222619912337209640071585617726182823159807086530908043427223925438705353227949815783748421947577806634179740448479898342114286195890964814951325985489970330592893692081398041627328233752207807000402328087854304665341410463982442480669667193129646182867078229731360036941666813874606858859151295101218320962268157296221914290253164253552948488097844393207759852637434267746827609021901752347505733752021520614040176946109474363193301817028834190212049397172296876559821964894005643234444288624733187970674437976138837683481932013520334816274720064195689201450246239553950559829017102457374901493133385110017605849195394953758165592759005572440915877949376621 e = 65537 ec = pow(e , e , n)
qwq = ec * dc - 1
p = gcd(qwq,n) q = n // ( p * p )
phi = p * (p-1) * (q-1) d = invert(e,phi) print(long_to_bytes(pow(c,d,n)))
from Crypto.Cipher import AES defget_key(): f = open('./data' , 'rb') c = f.read() print(len(c)) c = [c[i*16:i*16+16] for i inrange(16)] key = [] for i in c: cipher = i for j inrange(256): tmp_key = key + [j] tmp_key = bytes([tmp_key[k%len(tmp_key)] for k inrange(16)]) aes = AES.new(tmp_key , AES.MODE_ECB) tmp = aes.decrypt(cipher) if tmp[0] == 0and tmp[1] == 15 ^ j: key.append(j) break else: print('wrong') returnbytes(key) , c[-1]