t = "KCLWG?K8M9O3?DE?84S9" #F0AF????B1F463????F7AE???B2AC4E6 import string import hashlib
dic1=string.ascii_uppercase for i1 in dic1: for i2 in dic1: for i3 in dic1: bb='KCLWG'+i1+'K8M9O3'+i2+'DE'+i3+'84S9' aa=hashlib.md5(bb.encode()) bbb=aa.hexdigest().upper() if bbb[:4]=='F0AF'and bbb[-7:]=='B2AC4E6': print(bbb)
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
c = "050f000a7e407151537802540b747176075178027552756d0256726262627c" tt = [i for i in long_to_bytes(int(c,16))]
for i inrange(len(tt)): print(chr(47 + (tt[i]^50)),end = "") print()
for i inrange(len(tt)): if(47 + (tt[i]^50) < 127): print(chr(47 + (tt[i]^50)),end = "") else: print("*",end = "") print()
#将上一步的密文,用形近字符进行调试,直至全部为+-47 m = b"flag{Cr42y_7hursd4y_v1v0_5o!!!}" for i inrange(len(tt)): print(m[i] - (tt[i]^50),end = ",") print()
#flag{Cr42y_7hursd4y_v1v0_5o!!!}
flag:
flag{Cr42y_7hursd4y_v1v0_5o!!!}
[WEEK1]what is m
题目描述:
1
这串神秘的数字怎么恢复成flag呢
题目:
1 2 3 4 5 6 7
from Crypto.Util.number import bytes_to_long from secret import flag
m = bytes_to_long(flag) print("m =",m)
# m = 7130439814055607156612810766069657529580176956197921317055778195831975924487086273340238725540060289765827225260320612710571684611641625602310966864004750195182916452942079032595376449532285
直接long_to_bytes
exp.py:
1 2 3 4 5 6
from Crypto.Util.number import *
m = 7130439814055607156612810766069657529580176956197921317055778195831975924487086273340238725540060289765827225260320612710571684611641625602310966864004750195182916452942079032595376449532285 print(long_to_bytes(m))
# p = 217873395548207236847876059475581824463 # q = 185617189161086060278518214521453878483 # c = 6170206647205994850964798055359827998224330552323068751708721001188295410644 # e = 65537
就是个RSA算法的实现,给了p、q的话直接解密就好(其实不给也行,p、q很小可以分解)
exp.py:
1 2 3 4 5 6 7 8 9 10 11 12 13
from Crypto.Util.number import *
e = 65537 p = 217873395548207236847876059475581824463 q = 185617189161086060278518214521453878483 c = 6170206647205994850964798055359827998224330552323068751708721001188295410644 e = 65537 n = p*q
d = inverse(e,(p-1)*(q-1)) print(long_to_bytes(pow(c,d,n)))
#flag{Y0ung_meiyou_xiaojj}
Week 2
[WEEK2]XOR
题目:
1 2 3 4
n = 20810298530643139779725379335557687960281905096107101411585220918672653323875234344540342801651123667553812866458790076971583539529404583369246005781146655852295475940942005806084842620601383912513102861245275690036363402134681262533947475193408594967684453091957401932685922178406769578067946779033282889429596341714417295489842047781388337010440309434639274398589029236213499110100040841426995862849012466514170374143655264739023758914247116354182164550612494432327931655944868705959874670536031052370968354394583880324756639698871918124498442308334232127034553164826483441746719644515097123067550594588348951855987 c = 15294238831055894095745317706739204020319929545635634316996804750424242996533741450795483290384329104330090410419090776738963732127756947425265305276394058773237118310164375814515488333015347737716139073947021972607133348357843542310589577847859875065651579863803460777883480006078771792286205582765870786584904810922437581419555823588531402681156158991972023042592179567351862630979979989132957073962160946903567157184627177910380657091234027709595863061642453096671316307805667922247180282486325569430449985678954185611299166777141304330040782500340791721548519463552822293017606441987565074653579432972931432057376 e = 65537 p⊕q = 66138689143868607947630785415331461127626263390302506173955100963855136134289233949354345883327245336547595357625259526618623795152771487180400409991587378085305813144661971099363267511657121911410275002816755637490837422852032755234403225128695875574749525003296342076268760708900752562579555935703659615570
from Crypto.Util.number import * import sys sys.setrecursionlimit(1500)
n = 20810298530643139779725379335557687960281905096107101411585220918672653323875234344540342801651123667553812866458790076971583539529404583369246005781146655852295475940942005806084842620601383912513102861245275690036363402134681262533947475193408594967684453091957401932685922178406769578067946779033282889429596341714417295489842047781388337010440309434639274398589029236213499110100040841426995862849012466514170374143655264739023758914247116354182164550612494432327931655944868705959874670536031052370968354394583880324756639698871918124498442308334232127034553164826483441746719644515097123067550594588348951855987 c = 15294238831055894095745317706739204020319929545635634316996804750424242996533741450795483290384329104330090410419090776738963732127756947425265305276394058773237118310164375814515488333015347737716139073947021972607133348357843542310589577847859875065651579863803460777883480006078771792286205582765870786584904810922437581419555823588531402681156158991972023042592179567351862630979979989132957073962160946903567157184627177910380657091234027709595863061642453096671316307805667922247180282486325569430449985678954185611299166777141304330040782500340791721548519463552822293017606441987565074653579432972931432057376 e = 65537 gift = 66138689143868607947630785415331461127626263390302506173955100963855136134289233949354345883327245336547595357625259526618623795152771487180400409991587378085305813144661971099363267511657121911410275002816755637490837422852032755234403225128695875574749525003296342076268760708900752562579555935703659615570
from Crypto.Util.number import * from random import * p = getPrime(128) seed = randint(2, p - 1)
classprng: n = p a,b = [randint(2, p - 1) for _ inrange(2)] def__init__(self,seed): self.state = seed defnext(self): self.state = (self.state * self.a + self.b) % self.n return self.state
defmain(): gen = prng(seed) s = [seed] s.append(gen.next()) s.append(gen.next()) s.append(gen.next()) s.append(gen.next()) s.append(gen.next()) s.append(gen.next()) f = open("output.txt",'w') json.dump(s,f) f.close() flag = "flag{"+str(gen.next())+"}" return flag main()
from Crypto.Util.number import * from gmpy2 import *
#yafu c = 28535916699190273475273097091422420145718978597126134891571109006456944397344856577421369324831702083810238921719657496747722337086131545474384253288151783029981352196506749672783866527948391034258269669654392993063423671431837882584570973320095601407578443348352802850496429240170710269529489900871208384711844617081275862971410246759090936379744946527813691945129059991795202769186014306943707223831130752782380563227353615164053563120572722464543812139164048342504963081408349934180883607554389607335607410546630525512019818062185681153477671373000186961748278118124044645584490544698827467815360888525822167 n = 114107341297408283801468814470303963122122556489590451040619457052827864984505912502462030175984161431709841571908269123131659496812467145870607611968843929870716066046232009282431653653484798819370087696248364531531706249180822839879862098012984590503284615395588919199545142177727328844260380842155437987767067800740569616584597507776426572206990858918111272636507821551592564540694671795374831548677720629329358177802890287837056940407030212276399942462042866947423728888561392653713356355778914658317507319575084393752755452971007289968044006561357799908892371839922838486713582082980752194204224263283004373 e = 65537 primes = [14147604789494386003,16946507762934111301,17075632607344331131,9281508366366115669,10040612110882504553,9356350172425710359,15622487550947237203,10436802938040427139,11777892065426651999,10100522426677320149,17088379813205887661,16880270107514803247,9723861249937499279,10203735303764112277,13498192768855092449,11502613740816749197,9261040693807289549,11964584391817142269,10270880245559150279,16340211116882594287,10126802520926958821,15774106340553595249,10635881647150245973,12712357180113548549,14198042938738648387,15616762946597906161,10986943768724409089,13428970346605599557,16651625235320957803,11718181938374860349,13618885037077024279,10621161426185076191] phi = 1 for i in primes: phi *= (i-1) d = inverse(e,phi) print(str(long_to_bytes(pow(c,d,n)))[2:-1],end = "")
d = inverse(e//2,phi) print(long_to_bytes(iroot(pow(c,d,n),2)[0]))
#flag{This_e_is_real_or_not}
[WEEK2]factorizing_n
题目描述:
1
分解n试试?
题目:
1 2 3
n = 226515252384227990547287743140613580056836242860947832749754689048997071950972581790210817523352001702907675581567498443649554801433663166425134375454937126656357069687274036935331269594383360450823787099121079436459236734336130768046337169817940540921822023269188752420603975467384377614321048859304185067329741055517464271746238143742661897809442359331215501438861121047081117632626097939097519866099140569819965948998542652908170134545593659233229897003698175558888336706474178958535138595687148003367152624421106553412886263257022809480187410133186189435436294593588009551451899398811758511878324326255293307347560753524372663257044426744744426759970254203341706284024734042826158828749144322843934985927079504722440497388146240627249465363931951790326885478025237643 c = 52409805591744226507807531465616894934028463651864630447934395956954575834603756391651746535033902964658694070544877880970130028487381287088425209448038533705903737694267359561133766799228825599943891152463160326583722749586721691729062524310148743637505134465210906856660867852927837112666513674858029892207902196213784902541173835447263733760225682942461048573387925463479672527491229113710629340960375692432470493054415657845868577650170648157402682163577152288432313996310562452677399267755695644659367792066311336521698894993982901657735586844358679888210537898629281625526455444811591386493005341435516094660429968084363084301878446471676122069724608083578102382181382107225473535696274374370868301830807644939881080301668756603163431000745972823980427048672732291 e = 65537
yafu分解一下就能得到n的分解,直接解密即可(主要注意phi的求法)。
exp:
1 2 3 4 5 6 7 8 9 10 11
from Crypto.Util.number import *
n = 226515252384227990547287743140613580056836242860947832749754689048997071950972581790210817523352001702907675581567498443649554801433663166425134375454937126656357069687274036935331269594383360450823787099121079436459236734336130768046337169817940540921822023269188752420603975467384377614321048859304185067329741055517464271746238143742661897809442359331215501438861121047081117632626097939097519866099140569819965948998542652908170134545593659233229897003698175558888336706474178958535138595687148003367152624421106553412886263257022809480187410133186189435436294593588009551451899398811758511878324326255293307347560753524372663257044426744744426759970254203341706284024734042826158828749144322843934985927079504722440497388146240627249465363931951790326885478025237643 c = 52409805591744226507807531465616894934028463651864630447934395956954575834603756391651746535033902964658694070544877880970130028487381287088425209448038533705903737694267359561133766799228825599943891152463160326583722749586721691729062524310148743637505134465210906856660867852927837112666513674858029892207902196213784902541173835447263733760225682942461048573387925463479672527491229113710629340960375692432470493054415657845868577650170648157402682163577152288432313996310562452677399267755695644659367792066311336521698894993982901657735586844358679888210537898629281625526455444811591386493005341435516094660429968084363084301878446471676122069724608083578102382181382107225473535696274374370868301830807644939881080301668756603163431000745972823980427048672732291 e = 65537 p = 11776588228599764849559519654482976956833367474471407292255776713760090338489966385328569279135095351660161277221351884258247731394014018172166064062551483 phi = p**4*(p-1) d = inverse(e,phi) print(long_to_bytes(pow(c,d,n)))
#flag{1f95f530f85b940db810fc917607ee22}
[WEEK2]哈希猫
题目描述:
1
我翻开 task.py 一查,这题目没有 flag 歪歪斜斜的每页上都写着 ‘哈希算法’ 几个字.我横竖睡不着,仔细看了半夜,才从字缝里看出字来,满本都写着 ‘flag’ !
for i inrange(len(hashes)): has_found = 0 #一个字符 for j in table: if(find_hash(j,i)): has_found = 1 break if(has_found == 1): continue #两个字符 for j in table: for k in table: if(find_hash(j+k,i)): has_found = 1 break if(has_found == 1): continue #三个字符 for j in table: for k in table: for m in table: if(find_hash(j+k+m,i)): has_found = 1 break if(has_found == 1): continue #四个字符 for j in table: for k in table: for m in table: for n in table: if(find_hash(j+k+m+n,i)): has_found = 1 break if(has_found == 1): continue
import math from secret import s s = s.lower() keyM = [?] l = len(keyM) assert(math.gcd(l,26)==1) for i inrange(len(s)): print(chr((ord(s[i])*l-97+(keyM[i % l]))%26+97),end="")
#obj:待分割字符串 #sec:分割长度 defcut(obj, sec): return [obj[i:i+sec] for i inrange(0,len(obj),sec)]
#计算重合指数 defIn(c): freq = {i:0for i in table} for i inrange(len(table)): freq[table[i]] = c.count(table[i]) / len(c) index = 0 for i in table: index += freq[i] * freq[i] return index
#计算与英语字频吻合指数 defIn_m(c): freq = {i:0for i in table} for i inrange(len(table)): freq[table[i]] = c.count(table[i]) / len(c) index = 0 for i in table: index += freq[i] * dic[i] return index
#part1 依据重合指数找出l = 11 t = c if(0): for i inrange(1,100): temp = cut(t,i) temp1 = [""for m inrange(i)] for k inrange(len(temp)-1): temp1[0] += temp[k][0] index = In("".join(temp1[0])) if(index > 0.060): print("lenkey = ",i," In = ",index)
#part2 依据与英语字频吻合指数找出具体的key if(0): a = 11 for i inrange(11): for b inrange(26): temp = cut(t,11) temp1 = [""for m inrange(11)] for k inrange(len(temp)-1): temp1[i] += temp[k][i] m = '' for x in temp1[i]: m += table[((table.index(x)-b)*inverse(a,26))%26] index = In_m("".join(m)) #print(index) if(index > 0.060): print(b, end = ",")
#part3 得到m if(1): m = "" key = [19,23,25,1,25,15,11,9,15,17,3] b = 11 for i inrange(len(t)): temp = ((table.index(t[i])-key[i%b])*inverse(11,26))%26 m += table[temp] print(m)
from Crypto.Util.number import * import random from secret import flag
M = 2**54 k = 6
defgen_prime(M, k): whileTrue: prime = sum([random.getrandbits(16) * M**i for i inrange(k)]) if isPrime(prime) and (prime-1) % 3 == 0: return prime p, q, r = [gen_prime(M, k) for i inrange(3)] N = p * q * r e = 3 m = bytes_to_long(flag) c = pow(m, e, N) print(f'N = {N}') print(f'c = {c}')
""" N = 3298593732762513945346583663585189774036688951059270517149719979434109398447628726951796006700754759352430339647168415338320547665794785951232342902233013221132246450312038122695046634624323814318286314664160113738299465643128504110932989263063331290006313 c = 869489491924953293290699796392271834401780578884556874640489836779925847562085802848542382525324081900560761299059365684697233025590164192409062717942292142906458498707677300694595072310705415037345581289469698221468377159605973403471463296806900975548438 """
from sympy.ntheory.modular import crt from Crypto.Util.number import *
M = 2**54 k = 6 e = 3
N = 3298593732762513945346583663585189774036688951059270517149719979434109398447628726951796006700754759352430339647168415338320547665794785951232342902233013221132246450312038122695046634624323814318286314664160113738299465643128504110932989263063331290006313 c = 869489491924953293290699796392271834401780578884556874640489836779925847562085802848542382525324081900560761299059365684697233025590164192409062717942292142906458498707677300694595072310705415037345581289469698221468377159605973403471463296806900975548438
n = N R.<x> = ZZ[] listM = [] while(N != 0): listM.append(N & (2**54-1)) N = N>>54 f = 0 for i inrange(0,16): f += (x^i)*(listM[i]) #print(f.is_irreducible()) temp = f.factor() plist = list(temp[0][0]) qlist = list(temp[1][0]) rlist = list(temp[2][0]) p,q,r = 0,0,0 for i inrange(6): p += plist[i]*(2**(54*i)) q += qlist[i]*(2**(54*i)) r += rlist[i]*(2**(54*i))
PR.<x> = Zmod(p)[] f = x^3 - c resp = f.roots()
PR.<x> = Zmod(q)[] f = x^3 - c resq = f.roots()
PR.<x> = Zmod(r)[] f = x^3 - c resr = f.roots()
modlist = [p,q,r] for i in resp: for j in resq: for k in resr: c = [int(i[0]),int(j[0]),int(k[0])] m = crt(modlist,c)[0] temp = long_to_bytes(m) if(b"flag"in temp): print(temp)
# 遍历全排列并将其填入目标字符串 for perm in permutations: result = list(target_string) for char in perm: result[result.index('*')] = char results.append(''.join(result))
# 打印或处理结果 for idx, result inenumerate(results, 1): temp = b32decode(c.translate(str.maketrans(result,t4ble))) if("flag"instr(temp) and"\\"notinstr(temp)): print(temp) break
from Crypto.Util.number import bytes_to_long ,getPrime from random import randint from secret import flag , p, A, B classLCG: def__init__(self, seed, multiplier, increment, modulus): self.state = seed self.multiplier = multiplier self.increment = increment self.modulus = modulus