0%

迎新赛

Dest0g3 520迎新赛

并不详细的wp,最近事情较多,假期了再来仔细分析🧐

solution

rank

Crypto

babyRSA

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from Crypto.Util.number import bytes_to_long, getPrime
from gmpy2 import next_prime
p = getPrime(1024)
q = next_prime(p)
n = p*q
flag = open('flag.txt', 'rb').read()
m = bytes_to_long(flag)
e = 65537
c = pow(m, e, n)
print(n)
print(c)
'''
27272410937497615429184017335437367466288981498585803398561456300019447702001403165885200936510173980380489828828523983388730026101865884520679872671569532101708469344562155718974222196684544003071765625134489632331414011555536130289106822732544904502428727133498239161324625698270381715640332111381465813621908465311076678337695819124178638737015840941223342176563458181918865641701282965455705790456658431641632470787689389714643528968037519265144919465402561959014798324908010947632834281698638848683632113623788303921939908168450492197671761167009855312820364427648296494571794298105543758141065915257674305081267
14181751948841206148995320731138166924841307246014981115736748934451763670304308496261846056687977917728671991049712129745906089287169170294259856601300717330153987080212591008738712344004443623518040786009771108879196701679833782022875324499201475522241396314392429412747392203809125245393462952461525539673218721341853515099201642769577031724762640317081252046606564108211626446676911167979492329012381654087618979631924439276786566078856385835786995011067720124277812004808431347148593882791476391944410064371926611180496847010107167486521927340045188960373155894717498700488982910217850877130989318706580155251854
'''

题解

费马分解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import gmpy2
import libnum


def isqrt(n):
x = n
y = (x + n // x) // 2
while y < x:
x = y
y = (x + n // x) // 2
return x


def fermat(n, verbose=True):
a = isqrt(n) # int(ceil(n**0.5))
b2 = a * a - n
b = isqrt(n) # int(b2**0.5)
count = 0
while b * b != b2:
a = a + 1
b2 = a * a - n
b = isqrt(b2) # int(b2**0.5)
count += 1
p = a + b
q = a - b
assert n == p * q
return p, q


n = 27272410937497615429184017335437367466288981498585803398561456300019447702001403165885200936510173980380489828828523983388730026101865884520679872671569532101708469344562155718974222196684544003071765625134489632331414011555536130289106822732544904502428727133498239161324625698270381715640332111381465813621908465311076678337695819124178638737015840941223342176563458181918865641701282965455705790456658431641632470787689389714643528968037519265144919465402561959014798324908010947632834281698638848683632113623788303921939908168450492197671761167009855312820364427648296494571794298105543758141065915257674305081267
p, q = fermat(n)
e = 65537
c = 14181751948841206148995320731138166924841307246014981115736748934451763670304308496261846056687977917728671991049712129745906089287169170294259856601300717330153987080212591008738712344004443623518040786009771108879196701679833782022875324499201475522241396314392429412747392203809125245393462952461525539673218721341853515099201642769577031724762640317081252046606564108211626446676911167979492329012381654087618979631924439276786566078856385835786995011067720124277812004808431347148593882791476391944410064371926611180496847010107167486521927340045188960373155894717498700488982910217850877130989318706580155251854
phi = (p - 1) * (q - 1)
d = int(gmpy2.invert(e, phi))
m = pow(c, d, n)
print(libnum.n2s(int(m)))
# b'Dest0g3{96411aad-032c-20a8-bc43-b473f6f08536}'

babyAES

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from Crypto.Cipher import AES
import os
iv = os.urandom(16)
key = os.urandom(16)
my_aes = AES.new(key, AES.MODE_CBC, iv)
flag = open('flag.txt', 'rb').read()
flag += (16 - len(flag) % 16) * b'\x00'
c = my_aes.encrypt(flag)
print(c)
print(iv)
print(key)

'''
b'C4:\x86Q$\xb0\xd1\x1b\xa9L\x00\xad\xa3\xff\x96 hJ\x1b~\x1c\xd1y\x87A\xfe0\xe2\xfb\xc7\xb7\x7f^\xc8\x9aP\xdaX\xc6\xdf\x17l=K\x95\xd07'
b'\xd1\xdf\x8f)\x08w\xde\xf9yX%\xca[\xcb\x18\x80'
b'\xa4\xa6M\xab{\xf6\x97\x94>hK\x9bBe]F'
'''

题解

1
2
3
4
5
6
7
8
9
from Crypto.Cipher import AES

iv = b'\xd1\xdf\x8f)\x08w\xde\xf9yX%\xca[\xcb\x18\x80'
key = b'\xa4\xa6M\xab{\xf6\x97\x94>hK\x9bBe]F'
c = b'C4:\x86Q$\xb0\xd1\x1b\xa9L\x00\xad\xa3\xff\x96 hJ\x1b~\x1c\xd1y\x87A\xfe0\xe2\xfb\xc7\xb7\x7f^\xc8\x9aP\xdaX\xc6\xdf\x17l=K\x95\xd07'
flag = AES.new(key, AES.MODE_CBC, iv)
flag = flag.decrypt(c)
print(flag)
# b'Dest0g3{d0e5fa76-e50f-76f6-9cf1-b6c2d576b6f4}\x00\x00\x00'

ezStream

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from Crypto.Util.number import *

f = open('flag.txt', 'r')
flag = f.read()
f.close()
assert flag[:8] == "Dest0g3{"


class LCG:
def __init__(self):
self.a = getRandomNBitInteger(32)
self.b = getRandomNBitInteger(32)
self.m = getPrime(32)
self.seed = getRandomNBitInteger(32)

def next(self):
self.seed = (self.a * self.seed + self.b) % self.m
return self.seed >> 16

def output(self):
print("a = {}\nb = {}\nm = {}".format(self.a, self.b, self.m))
print("state1 = {}".format(self.next()))
print("state2 = {}".format(self.next()))


lcg = LCG()
lcg.output()
c = b''.join([long_to_bytes(ord(flag[i]) ^ (lcg.next() % 10))
for i in range(len(flag))])
print(bytes_to_long(c))
'''
a = 3939333498
b = 3662432446
m = 2271373817
state1 = 17362
state2 = 20624
600017039001091357643174067454938198067935635401496485588306838343558125283178792619821966678282131419050878
'''

题解

爆破求seed2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 爆破出seed2
from Crypto.Util.number import *
a = 3939333498
b = 3662432446
m = 2271373817
state1 = 17362
state2 = 20624
c = 600017039001091357643174067454938198067935635401496485588306838343558125283178792619821966678282131419050878

for i in range(2**16):
s = state1<<16
s+=i
if ((a*s+b)%m)>>16 == state2:
s2 = (a*s+b)%m
print s2

"""
1351665013
1351671098
1351677183
"""

求flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from Crypto.Util.number import *
c = 600017039001091357643174067454938198067935635401496485588306838343558125283178792619821966678282131419050878

class LCG:
def __init__(self):
self.a = 3939333498
self.b = 3662432446
self.m = 2271373817
self.seed = 1351677183 # 一个一个试
"""
1351665013
1351671098
1351677183
"""

def next(self):
self.seed = (self.a * self.seed + self.b) % self.m
return self.seed >> 16

lcg = LCG()
c = long_to_bytes(c)
flag = ''.join([chr(i ^ (lcg.next() % 10)) for i in c])
print(flag)
# Dest0g3{f21c7180-c35e-f912-e4bc-bfd235759a25}

ezDLP

题解

sage离散对数

1
2
3
4
5
6
7
8
import libnum
# h = g^x mod p
p = 335215034881592512312398694238485179340610060759881511231472142277527176340784432381542726029524727833039074808456839870641607412102746854257629226877248337002993023452385472058106944014653401647033456174126976474875859099023703472904735779212010820524934972736276889281087909166017427905825553503050645575935980580803899122224368875197728677516907272452047278523846912786938173456942568602502013001099009776563388736434564541041529106817380347284002060811645842312648498340150736573246893588079033524476111268686138924892091575797329915240849862827621736832883215569687974368499436632617425922744658912248644475097139485785819369867604176912652851123185884810544172785948158330991257118563772736929105360124222843930130347670027236797458715653361366862282591170630650344062377644570729478796795124594909835004189813214758026703689710017334501371279295621820181402191463184275851324378938021156631501330660825566054528793444353
g = 19
h = 199533304296625406955683944856330940256037859126142372412254741689676902594083385071807594584589647225039650850524873289407540031812171301348304158895770989218721006018956756841251888659321582420167478909768740235321161096806581684857660007735707550914742749524818990843357217489433410647994417860374972468061110200554531819987204852047401539211300639165417994955609002932104372266583569468915607415521035920169948704261625320990186754910551780290421057403512785617970138903967874651050299914974180360347163879160470918945383706463326470519550909277678697788304151342226439850677611170439191913555562326538607106089620201074331099713506536192957054173076913374098400489398228161089007898192779738439912595619813699711049380213926849110877231503068464392648816891183318112570732792516076618174144968844351282497993164926346337121313644001762196098432060141494704659769545012678386821212213326455045335220435963683095439867976162
x = discrete_log(Mod(h,p),Mod(g,p))
print(libnum.n2s(int(x)))
# b'Dest0g3{07ed2a6f-182f-a05d-c81e-1318af820a78}'

Mr.Doctor

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from Crypto.Util.number import *
from hashlib import sha256
import string

table = string.ascii_letters + string.digits
flag = open('flag.txt', 'rb').read()[8:-1]
seed = getRandomNBitInteger(40)


class SHA256:
def __init__(self):
self.proof = []
self.sha = 0
self.sha_flag = []

def encryption(self):
for i in range(len(flag) // 4):
self.proof.append(flag[4 * i:4 + 4 * i])
self.sha = sha256(self.proof[i]).hexdigest().encode()
self.sha_flag.append(bytes_to_long(self.sha))
return self.sha_flag


class RHODES_ELITE:
def __init__(self):
self.Doctor = getPrime(64)
self.Amiya = getRandomNBitInteger(40)
self.Rosmontis = getRandomNBitInteger(40)
self.Blaze = getRandomNBitInteger(40)
self.seed = seed

def next(self):
self.seed = (self.Amiya * self.seed * self.seed + self.Rosmontis * self.seed + self.Blaze) % self.Doctor
return self.seed >> 12

def output(self):
print("Amiya = ", self.Amiya)
print("Rosmontis = ", self.Rosmontis)
print("Blaze = ", self.Blaze)
print("Doctor = ", self.Doctor)


sha = SHA256()
sha_flag = sha.encryption()
elite = RHODES_ELITE()
elite.output()
print("Ash = ", elite.next())
print("SliverAsh = ", elite.next())
W = b''.join([long_to_bytes(sha_flag[i] % (seed ** 3) ^ (elite.next() % 100)) for i in range(len(sha_flag))])
print(bytes_to_long(W))

'''
Amiya = 956366446278
Rosmontis = 1061992537343
Blaze = 636205571590
Doctor = 18068433704538283397
Ash = 1097363493609113
SliverAsh = 2051431344160327
1920358673646340365826516899186299898354902389402251443712585240681673718967552394250439615271108958695077816395789102908554482423707690040360881719002797624203057223577713119411615697309430781610828105111854807558984242631896605944487456402584672441464316236703857236007195673926937583757881853655505218912262929700452404084
'''

题解

seed1、seed2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 爆破出seed2
from Crypto.Util.number import *

a = 956366446278
b = 1061992537343
m = 18068433704538283397
state1 = 1097363493609113
state2 = 2051431344160327
B = 636205571590

for i in range(2 ** 12):
s = state1 << 12
s += i
if ((((a * s + b) % m) * s + B) % m) >> 12 == state2:
s2 = ((((a * s + b) % m) * s + B) % m)
print(s)
print(s2)

# s1 = 4494800869822930172
# s2 = 8402662785680701087

seed

1
2
3
4
5
6
7
8
9
10
11
12
13
# sage 求解seed 花了三个小时,结果一行搞定
a = 956366446278
b = 1061992537343
B = 636205571590
m = 18068433704538283397
S1 = 4494800869822930172
S2 = 8402662785680701087
kbits = 40

PR.<x> = PolynomialRing(Zmod(m))
f = (a*x+b)*x+B-S1 # f(x)
print(f.roots())
#626844643882

flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from hashlib import sha256
from string import ascii_letters, digits
from itertools import product
from Crypto.Util.number import *

import gmpy2
from Crypto.Util.number import *
from hashlib import sha256
import string


# seed = getRandomNBitInteger(40)


class SHA256:
def __init__(self):
self.proof = []
self.sha = 0
self.sha_flag = []

def encryption(self):
for i in range(len(flag) // 4):
self.proof.append(flag[4 * i:4 + 4 * i])
self.sha = sha256(self.proof[i]).hexdigest().encode()
self.sha_flag.append(bytes_to_long(self.sha))
return self.sha_flag


class RHODES_ELITE:
def __init__(self):
self.Doctor = 18068433704538283397
self.Amiya = 956366446278
self.Rosmontis = 1061992537343
self.Blaze = 636205571590
self.seed = 626844643882

def next(self):
self.seed = (self.Amiya * self.seed * self.seed + self.Rosmontis * self.seed + self.Blaze) % self.Doctor
return self.seed >> 12

def output(self):
print("Amiya = ", self.Amiya)
print("Rosmontis = ", self.Rosmontis)
print("Blaze = ", self.Blaze)
print("Doctor = ", self.Doctor)




W = 1920358673646340365826516899186299898354902389402251443712585240681673718967552394250439615271108958695077816395789102908554482423707690040360881719002797624203057223577713119411615697309430781610828105111854807558984242631896605944487456402584672441464316236703857236007195673926937583757881853655505218912262929700452404084
W = long_to_bytes(W)

# 经过测试每15个对应一次组四字long_to_bytes
tmp = []
for i in range(len(W) // 15):
tmp.append(bytes_to_long(W[15*i: 15*i+15]))

ss = [] # sha_flag[i] % (seed ** 3)
elite = RHODES_ELITE()
print(elite.next())
print(elite.next())
for i in tmp: # [sha_flag[i] % (seed ** 3) ^ (elite.next() % 100)) for i in range(len(sha_flag))]
ss.append(i ^ (elite.next() % 100))


seed = 626844643882**3

table = ascii_letters + digits + '-'
data_dict = {} # 建立字典
for i in product(table, repeat=4): # 遍历所有四字
head = ''.join(i)
print(head)
tmp = bytes_to_long(sha256(head.encode()).hexdigest().encode()) % seed
data_dict[tmp] = head # 字典

for i in ss: # 查字典
try:
print(data_dict[i], end='')
except:
print('\n', i, '\n')

Bag

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import gmpy2
from Crypto.Util.number import *
from secret import flag

message = bytes_to_long(flag[8:-1])
Baglenth=286
Bag=[2, 3, 6, 12, 24, 48, 96, 192, 384, 768, 1536, 3072, 6144, 12288, 24576, 49152, 98304, 196608, 393216, 786432, 1572864, 3145728, 6291456, 12582912, 25165824, 50331648, 100663296, 201326592, 402653184, 805306368, 1610612736, 3221225472, 6442450944, 12884901888, 25769803776, 51539607552, 103079215104, 206158430208, 412316860416, 824633720832, 1649267441664, 3298534883328, 6597069766656, 13194139533312, 26388279066624, 52776558133248, 105553116266496, 211106232532992, 422212465065984, 844424930131968, 1688849860263936, 3377699720527872, 6755399441055744, 13510798882111488, 27021597764222976, 54043195528445952, 108086391056891904, 216172782113783808, 432345564227567616, 864691128455135232, 1729382256910270464, 3458764513820540928, 6917529027641081856, 13835058055282163712, 27670116110564327424, 55340232221128654848, 110680464442257309696, 221360928884514619392, 442721857769029238784, 885443715538058477568, 1770887431076116955136, 3541774862152233910272, 7083549724304467820544, 14167099448608935641088, 28334198897217871282176, 56668397794435742564352, 113336795588871485128704, 226673591177742970257408, 453347182355485940514816, 906694364710971881029632, 1813388729421943762059264, 3626777458843887524118528, 7253554917687775048237056, 14507109835375550096474112, 29014219670751100192948224, 58028439341502200385896448, 116056878683004400771792896, 232113757366008801543585792, 464227514732017603087171584, 928455029464035206174343168, 1856910058928070412348686336, 3713820117856140824697372672, 7427640235712281649394745344, 14855280471424563298789490688, 29710560942849126597578981376, 59421121885698253195157962752, 118842243771396506390315925504, 237684487542793012780631851008, 475368975085586025561263702016, 950737950171172051122527404032, 1901475900342344102245054808064, 3802951800684688204490109616128, 7605903601369376408980219232256, 15211807202738752817960438464512, 30423614405477505635920876929024, 60847228810955011271841753858048, 121694457621910022543683507716096, 243388915243820045087367015432192, 486777830487640090174734030864384, 973555660975280180349468061728768, 1947111321950560360698936123457536, 3894222643901120721397872246915072, 7788445287802241442795744493830144, 15576890575604482885591488987660288, 31153781151208965771182977975320576, 62307562302417931542365955950641152, 124615124604835863084731911901282304, 249230249209671726169463823802564608, 498460498419343452338927647605129216, 996920996838686904677855295210258432, 1993841993677373809355710590420516864, 3987683987354747618711421180841033728, 7975367974709495237422842361682067456, 15950735949418990474845684723364134912, 31901471898837980949691369446728269824, 63802943797675961899382738893456539648, 127605887595351923798765477786913079296, 255211775190703847597530955573826158592, 510423550381407695195061911147652317184, 1020847100762815390390123822295304634368, 2041694201525630780780247644590609268736, 4083388403051261561560495289181218537472, 8166776806102523123120990578362437074944, 16333553612205046246241981156724874149888, 32667107224410092492483962313449748299776, 65334214448820184984967924626899496599552, 130668428897640369969935849253798993199104, 261336857795280739939871698507597986398208, 522673715590561479879743397015195972796416, 1045347431181122959759486794030391945592832, 2090694862362245919518973588060783891185664, 4181389724724491839037947176121567782371328, 8362779449448983678075894352243135564742656, 16725558898897967356151788704486271129485312, 33451117797795934712303577408972542258970624, 66902235595591869424607154817945084517941248, 133804471191183738849214309635890169035882496, 267608942382367477698428619271780338071764992, 535217884764734955396857238543560676143529984, 1070435769529469910793714477087121352287059968, 2140871539058939821587428954174242704574119936, 4281743078117879643174857908348485409148239872, 8563486156235759286349715816696970818296479744, 17126972312471518572699431633393941636592959488, 34253944624943037145398863266787883273185918976, 68507889249886074290797726533575766546371837952, 137015778499772148581595453067151533092743675904, 274031556999544297163190906134303066185487351808, 548063113999088594326381812268606132370974703616, 1096126227998177188652763624537212264741949407232, 2192252455996354377305527249074424529483898814464, 4384504911992708754611054498148849058967797628928, 8769009823985417509222108996297698117935595257856, 17538019647970835018444217992595396235871190515712, 35076039295941670036888435985190792471742381031424, 70152078591883340073776871970381584943484762062848, 140304157183766680147553743940763169886969524125696, 280608314367533360295107487881526339773939048251392, 561216628735066720590214975763052679547878096502784, 1122433257470133441180429951526105359095756193005568, 2244866514940266882360859903052210718191512386011136, 4489733029880533764721719806104421436383024772022272, 8979466059761067529443439612208842872766049544044544, 17958932119522135058886879224417685745532099088089088, 35917864239044270117773758448835371491064198176178176, 71835728478088540235547516897670742982128396352356352, 143671456956177080471095033795341485964256792704712704, 287342913912354160942190067590682971928513585409425408, 574685827824708321884380135181365943857027170818850816, 1149371655649416643768760270362731887714054341637701632, 2298743311298833287537520540725463775428108683275403264, 4597486622597666575075041081450927550856217366550806528, 9194973245195333150150082162901855101712434733101613056, 18389946490390666300300164325803710203424869466203226112, 36779892980781332600600328651607420406849738932406452224, 73559785961562665201200657303214840813699477864812904448, 147119571923125330402401314606429681627398955729625808896, 294239143846250660804802629212859363254797911459251617792, 588478287692501321609605258425718726509595822918503235584, 1176956575385002643219210516851437453019191645837006471168, 2353913150770005286438421033702874906038383291674012942336, 4707826301540010572876842067405749812076766583348025884672, 9415652603080021145753684134811499624153533166696051769344, 18831305206160042291507368269622999248307066333392103538688, 37662610412320084583014736539245998496614132666784207077376, 75325220824640169166029473078491996993228265333568414154752, 150650441649280338332058946156983993986456530667136828309504, 301300883298560676664117892313967987972913061334273656619008, 602601766597121353328235784627935975945826122668547313238016, 1205203533194242706656471569255871951891652245337094626476032, 2410407066388485413312943138511743903783304490674189252952064, 4820814132776970826625886277023487807566608981348378505904128, 9641628265553941653251772554046975615133217962696757011808256, 19283256531107883306503545108093951230266435925393514023616512, 38566513062215766613007090216187902460532871850787028047233024, 77133026124431533226014180432375804921065743701574056094466048, 154266052248863066452028360864751609842131487403148112188932096, 308532104497726132904056721729503219684262974806296224377864192, 617064208995452265808113443459006439368525949612592448755728384, 1234128417990904531616226886918012878737051899225184897511456768, 2468256835981809063232453773836025757474103798450369795022913536, 4936513671963618126464907547672051514948207596900739590045827072, 9873027343927236252929815095344103029896415193801479180091654144, 19746054687854472505859630190688206059792830387602958360183308288, 39492109375708945011719260381376412119585660775205916720366616576, 78984218751417890023438520762752824239171321550411833440733233152, 157968437502835780046877041525505648478342643100823666881466466304, 315936875005671560093754083051011296956685286201647333762932932608, 631873750011343120187508166102022593913370572403294667525865865216, 1263747500022686240375016332204045187826741144806589335051731730432, 2527495000045372480750032664408090375653482289613178670103463460864, 5054990000090744961500065328816180751306964579226357340206926921728, 10109980000181489923000130657632361502613929158452714680413853843456, 20219960000362979846000261315264723005227858316905429360827707686912, 40439920000725959692000522630529446010455716633810858721655415373824, 80879840001451919384001045261058892020911433267621717443310830747648, 161759680002903838768002090522117784041822866535243434886621661495296, 323519360005807677536004181044235568083645733070486869773243322990592, 647038720011615355072008362088471136167291466140973739546486645981184, 1294077440023230710144016724176942272334582932281947479092973291962368, 2588154880046461420288033448353884544669165864563894958185946583924736, 5176309760092922840576066896707769089338331729127789916371893167849472, 10352619520185845681152133793415538178676663458255579832743786335698944, 20705239040371691362304267586831076357353326916511159665487572671397888, 41410478080743382724608535173662152714706653833022319330975145342795776, 82820956161486765449217070347324305429413307666044638661950290685591552, 165641912322973530898434140694648610858826615332089277323900581371183104, 331283824645947061796868281389297221717653230664178554647801162742366208, 662567649291894123593736562778594443435306461328357109295602325484732416, 1325135298583788247187473125557188886870612922656714218591204650969464832, 2650270597167576494374946251114377773741225845313428437182409301938929664, 5300541194335152988749892502228755547482451690626856874364818603877859328, 10601082388670305977499785004457511094964903381253713748729637207755718656, 21202164777340611954999570008915022189929806762507427497459274415511437312, 42404329554681223909999140017830044379859613525014854994918548831022874624, 84808659109362447819998280035660088759719227050029709989837097662045749248, 169617318218724895639996560071320177519438454100059419979674195324091498496, 339234636437449791279993120142640355038876908200118839959348390648182996992, 678469272874899582559986240285280710077753816400237679918696781296365993984, 1356938545749799165119972480570561420155507632800475359837393562592731987968, 2713877091499598330239944961141122840311015265600950719674787125185463975936, 5427754182999196660479889922282245680622030531201901439349574250370927951872, 10855508365998393320959779844564491361244061062403802878699148500741855903744, 21711016731996786641919559689128982722488122124807605757398297001483711807488, 43422033463993573283839119378257965444976244249615211514796594002967423614976, 86844066927987146567678238756515930889952488499230423029593188005934847229952, 173688133855974293135356477513031861779904976998460846059186376011869694459904, 347376267711948586270712955026063723559809953996921692118372752023739388919808, 694752535423897172541425910052127447119619907993843384236745504047478777839616, 1389505070847794345082851820104254894239239815987686768473491008094957555679232, 2779010141695588690165703640208509788478479631975373536946982016189915111358464, 5558020283391177380331407280417019576956959263950747073893964032379830222716928, 11116040566782354760662814560834039153913918527901494147787928064759660445433856, 22232081133564709521325629121668078307827837055802988295575856129519320890867712, 44464162267129419042651258243336156615655674111605976591151712259038641781735424, 88928324534258838085302516486672313231311348223211953182303424518077283563470848, 177856649068517676170605032973344626462622696446423906364606849036154567126941696, 355713298137035352341210065946689252925245392892847812729213698072309134253883392, 711426596274070704682420131893378505850490785785695625458427396144618268507766784, 1422853192548141409364840263786757011700981571571391250916854792289236537015533568, 2845706385096282818729680527573514023401963143142782501833709584578473074031067136, 5691412770192565637459361055147028046803926286285565003667419169156946148062134272, 11382825540385131274918722110294056093607852572571130007334838338313892296124268544, 22765651080770262549837444220588112187215705145142260014669676676627784592248537088, 45531302161540525099674888441176224374431410290284520029339353353255569184497074176, 91062604323081050199349776882352448748862820580569040058678706706511138368994148352, 182125208646162100398699553764704897497725641161138080117357413413022276737988296704, 364250417292324200797399107529409794995451282322276160234714826826044553475976593408, 728500834584648401594798215058819589990902564644552320469429653652089106951953186816, 1457001669169296803189596430117639179981805129289104640938859307304178213903906373632, 2914003338338593606379192860235278359963610258578209281877718614608356427807812747264, 5828006676677187212758385720470556719927220517156418563755437229216712855615625494528, 11656013353354374425516771440941113439854441034312837127510874458433425711231250989056, 23312026706708748851033542881882226879708882068625674255021748916866851422462501978112, 46624053413417497702067085763764453759417764137251348510043497833733702844925003956224, 93248106826834995404134171527528907518835528274502697020086995667467405689850007912448, 186496213653669990808268343055057815037671056549005394040173991334934811379700015824896]
Bag=Bag[::-1]
m=372992427307339981616536686110115630075342113098010788080347982669869622759400031649792
w=274062421102700155372289583695782343443
assert gmpy2.gcd(m,w)==1
h=0
j=0
if m.bit_length()%2==0:
h=m.bit_length()
j=int(h//2)
else:
h=m.bit_length()
j=int(h//2+1)
def pad(m,lenth):
while len(m)<lenth:
m='0'+m
return m
def keygen():
pk=[]
sk=[]
sk.append(m)
sk.append(int(gmpy2.invert(w,m)))
D=[]
binD=[]
for i in range(Baglenth):
di=(w*Bag[i])%m
D.append(di)
bindi=bin(di)[2:]
bindi=pad(bindi,h)
binD.append(bindi)
U=[]
V=[]
for i in range(Baglenth):
tempu=int(str(binD[i][:j]),2)
U.append(tempu)
tempv=int(str(binD[i][j:]),2)
V.append(tempv)
e=gmpy2.next_prime(sum(V))+2
f=gmpy2.next_prime(sum(U))
assert gmpy2.gcd(e,f)==1
sk.append(int(e))
sk.append(int(f))
for i in range(Baglenth):
ai=e*U[i]+f*V[i]
pk.append(int(ai))
return pk,sk
Pk,Sk=keygen()
print(Pk)
print(Sk)
def Encrypt(plain,pk):
mbin=bin(plain)[2:]
c=0
mbin=pad(mbin,Baglenth)
for i in range(Baglenth):
c=c+int(mbin[i])*pk[i]
return c
c=Encrypt(message,Pk)
print(c)
# [13427720507293490146512325883268574617159432219330328705146993381673927145360640901644288, 20141580760940235219768488824902861925739148328995493057720490072510890718040961352466432, 10070790380470117609884244412451430962869574164497746528860245036255445359020480676233216, 5035395190235058804942122206225715481434787082248873264430122518127722679510240338116608, 15945418102411019548983386986381432357876825760454765337362054640737788485115761070702592, 7972709051205509774491693493190716178938412880227382668681027320368894242557880535351296, 3986354525602754887245846746595358089469206440113691334340513660184447121278940267675648, 1993177262801377443622923373297679044734603220056845667170256830092223560639470133837824, 14424309138694178868323787569917414139526733829358751538732121796720038925680375968563200, 20639875076640579580674219668227281686922799134009704474513054280033946608200828885925888, 10319937538320289790337109834113640843461399567004852237256527140016973304100414442962944, 5159968769160144895168554917056820421730699783502426118628263570008486652050207221481472, 16007704891873562594096603341796984828024782111081541764461125166678170471385744512385024, 21431572953230271443560627554167067031171823274871099587377555965013012381053513157836800, 24143506983908625868292639660352108132745343856765878498835771364180433335887397480562688, 25499473999247803080658645713444628683532104147713267954564879063764143813304339641925632, 26177457506917391686841648739990888958925484293186962682429432913555999052012810722607104, 13088728753458695843420824369995444479462742146593481341214716456777999526006405361303552, 6544364376729347921710412184997722239731371073296740670607358228388999763003202680651776, 16699902695658164107367531975767435737025117755978699040450672495868427026862242241970176, 8349951347829082053683765987883717868512558877989349520225336247934213513431121120985088, 4174975673914541026841882993941858934256279438994674760112668123967106756715560560492544, 2087487836957270513420941496970929467128139719497337380056334061983553378357780280246272, 1043743918478635256710470748485464733564069859748668690028167030991776689178890140123136, 521871959239317628355235374242732366782034929874334345014083515495888344589445070061568, 260935979619658814177617687121366183391017464937167172507041757747944172294722535030784, 13558188497103319553601134726829257708854940951798912291400514260547899231508002169159680, 20206814755845149923312893246683203471586902695229784850847250511947876761114641986224128, 23531127885216065108168772506610176352952883566945221130570618637647865525917961894756352, 25193284449901522700596712136573662793635874002802939270432302700497859908319621849022464, 12596642224950761350298356068286831396817937001401469635216151350248929954159810924511232, 6298321112475380675149178034143415698408968500700734817608075675124464977079905462255616, 16576881063531180484086914900340282466363916469680696113951031219236159633900593632772096, 21716161039059080388555783333438715850341390454170676762122508991292006962310937718030336, 10858080519529540194277891666719357925170695227085338381061254495646003481155468859015168, 5429040259764770097138945833359678962585347613542669190530627247823001740577734429507584, 2714520129882385048569472916679839481292673806771334595265313623911500870288867214753792, 1357260064941192524284736458339919740646336903385667297632656811955750435144433607376896, 678630032470596262142368229169959870323168451692833648816328405977875217572216803688448, 13767035523528788277583509997853554552321016445176745529555157584662864754146749303488512, 6883517761764394138791754998926777276160508222588372764777578792331432377073374651744256, 16869479388175687215908203382731963255239686330624515087535782777839643333897328227516416, 8434739694087843607954101691365981627619843165312257543767891388919821666948664113758208, 4217369847043921803977050845682990813809921582656128771883945694459910833474332056879104, 2108684923521960901988525422841495406904960791328064385941972847229955416737166028439552, 1054342461760980450994262711420747703452480395664032192970986423614977708368583014219776, 527171230880490225497131355710373851726240197832016096485493211807488854184291507109888, 13691306122733735259260891561123761543022552318246336753389739987577671572452786655199232, 20273373568660357776142771663830455388670708378453497081841863375462762931587034229243904, 10136686784330178888071385831915227694335354189226748540920931687731381465793517114621952, 18496063899458579590548018799226188464327109313943702975607459225539617878257399458955264, 9248031949729289795274009399613094232163554656971851487803729612769808939128699729477632, 4624015974864644897637004699806547116081777328485925743901864806384904469564349864738816, 2312007987432322448818502349903273558040888664242962871950932403192452234782174932369408, 14583724501009651370921577058220211396179876551451810141122459583270153262751728367828992, 7291862250504825685460788529110105698089938275725905070561229791635076631375864183914496, 3645931125252412842730394264555052849044969137862952535280614895817538315687932091957248, 15250686069919696567877523015546101041681916788261804972787300829582696303204606947622912, 7625343034959848283938761507773050520840958394130902486393650414791348151602303473811456, 17240392024773414288481706637155099877579911416395779948343818589069601221161792638550016, 22047916519680197290753179201846124555949387927528218679318902676208727755941537220919296, 24451678767133588791888915484191636895134126183094438044806444719778291023331409512103936, 25653559890860284542456783625364393064726495310877547727550215741563072657026345657696256, 26254500452723632417740717695950771149522679874769102568922101252455463473873813730492416, 26554970733655306355382684731243960191920772156714879989608044007901658882297547766890496, 26705205874121143324203668248890554713119818297687768699951015385624756586509414785089536, 26780323444354061808614160007713851973719341368174213055122501074486305438615348294189056, 13390161722177030904307080003856925986859670684087106527561250537243152719307674147094528, 20122801368382005598665865885197037610589267561373881968927618650295503505014477975191552, 23489121191484492945845258825867093422454066000017269689610802706821678897867879889240064, 11744560595742246472922629412933546711227033000008634844805401353410839448933939944620032, 5872280297871123236461314706466773355613516500004317422402700676705419724466969972310016, 16363860656229051764742983236501961294966190469332487416348343720026637007594125887799296, 8181930328114525882371491618250980647483095234666243708174171860013318503797062943899648, 17518685671350753087698071692394064940900979836663450559234079311680586397259172373594112, 8759342835675376543849035846197032470450489918331725279617039655840293198629586186797056, 17807391925131178418436843806367090852384677178496191344955513209594073744675433995042816, 8903695962565589209218421903183545426192338589248095672477756604797036872337716997521408, 17879568488576284751121536834860347330255601513954376541385871684072445581529499400404992, 8939784244288142375560768417430173665127800756977188270692935842036222790764749700202496, 17897612629437561334292710091983661449723332597818922840493461302692038540743015751745536, 8948806314718780667146355045991830724861666298909461420246730651346019270371507875872768, 4474403157359390333573177522995915362430833149454730710123365325673009635185753937936384, 15664922085973185313298914644766532298374848794057694060208676044510431962953517870612480, 21260181550280082803161783205651840766346856616359175735251331403929143126837399836950528, 24057811282433531548093217486094495000332860527509916572772659083638498708779340820119552, 25456626148510255920558934626315822117325862483085286991533322923493176499750311311704064, 26156033581548618106791793196426485675822363460872972200913654843420515395235796557496320, 26505737298067799199908222481481817455070613949766814805603820803384184842978539180392448, 13252868649033899599954111240740908727535306974883407402801910401692092421489269590196224, 6626434324516949799977055620370454363767653487441703701400955200846046210744634795098112, 3313217162258474899988527810185227181883826743720851850700477600423023105372317397549056, 15084329088422727596506589788361188208101345591190754630497232181885438698046799600418816, 7542164544211363798253294894180594104050672795595377315248616090942719349023399800209408, 3771082272105681899126647447090297052025336397797688657624308045471359674511699900104704, 15313261643346331096075649606813723143172100418229173033959147404409606982616490851696640, 21084351328966655694550150686675436188745482428444915222126567083878730636668886327492608, 10542175664483327847275075343337718094372741214222457611063283541939365318334443163746304, 5271087832241663923637537671668859047186370607111228805531641770969682659167221581873152, 16063264423414322108331094719103004140752617522885943107912814267158768474944251692580864, 21459352719000651200677873242820076687535740980773300259103400515253311382832766747934720, 10729676359500325600338936621410038343767870490386650129551700257626655691416383373967360, 5364838179750162800169468310705019171883935245193325064775850128813327845708191686983680, 16110139597168571546597060038621084203101399841926991237534918446080591068214736745136128, 8055069798584285773298530019310542101550699920963495618767459223040295534107368372568064, 4027534899292142886649265009655271050775349960481747809383729611520147767053684186284032, 2013767449646071443324632504827635525387674980240873904691864805760073883526842093142016, 1006883724823035721662316252413817762693837490120436952345932402880036941763421046571008, 503441862411517860831158126206908881346918745060218476172966201440018470881710523285504, 251720931205758930415579063103454440673459372530109238086483100720009235440855261642752, 125860465602879465207789531551727220336729686265054619043241550360004617720427630821376, 13490650740094929879116220649044438227327797062462856014668614156853929454220854717054976, 6745325370047464939558110324522219113663898531231428007334307078426964727110427358527488, 16800383192317222616291381045529684173991381484946042708814146920887409508915854580908032, 21827912103452101454658016406033416704155122961803350059554066842117631899818568192098304, 24341676559019540873841334086285282969236993700232003734924026802732743095269924997693440, 12170838279509770436920667043142641484618496850116001867462013401366371547634962498846720, 19513139647048375364972659404839895359468680644388329638878000082357112919178122151067648, 9756569823524187682486329702419947679734340322194164819439000041178556459589061075533824, 4878284911762093841243164851209973839867170161097082409719500020589278229794530537766912, 2439142455881046920621582425604986919933585080548541204859750010294639114897265268883456, 14647291735234013606823117096071068077126224759604599307576868386821246702809273536086016, 20751366374910496949923884431304108655722544599132628358935427575084550496765277669687296, 23803403694748738621474268098920628945020704518896642884614707169216202393743279736487936, 11901701847374369310737134049460314472510352259448321442307353584608101196871639868243968, 5950850923687184655368567024730157236255176129724160721153676792304050598435819934121984, 16403145969137082474196609395633653235287020284192409065723831777825952444578550868705280, 21629293491862031383610630581085401234802942361426533238008909270586903367649916335996928, 10814646745931015691805315290542700617401471180713266619004454635293451683824958167998464, 5407323372965507845902657645271350308700735590356633309502227317646725841912479083999232, 2703661686482753922951328822635675154350367795178316654751113658823362920956239541999616, 1351830843241376961475664411317837577175183897589158327375556829411681460478119770999808, 675915421620688480737832205658918788587591948794579163687778414705840730239059885499904, 337957710810344240368916102829459394293795974397289581843889207352920365119529942749952, 168978855405172120184458051414729697146897987198644790921944603676460182559764971374976, 84489427702586060092229025707364848573448993599322395460972301838230091279882485687488, 42244713851293030046114512853682424286724496799661197730486150919115045639941242843744, 21122356925646515023057256426841212143362248399830598865243075459557522819970621421872, 10561178462823257511528628213420606071681124199915299432621537729778761409985310710936, 5280589231411628755764314106710303035840562099957649716310768864889380704992655355468, 2640294615705814377882157053355151517920281049978824858155384432444690352496327677734, 1320147307852907188941078526677575758960140524989412429077692216222345176248163838867, 11376929106527795892898839465621865505177413571970563898745322852504166513570004716585524, 5688464553263897946449419732810932752588706785985281949372661426252083256785002358292762, 2844232276631948973224709866405466376294353392992640974686330713126041628392501179146381, 12798385171189843925916723859561259905445110198204389679873949362959076155178131224239281, 17775461618468791402262730856139156670020488600810264032467758687875593418570946246785731, 20263999842108265140435734354428105052308177802113201208764663350333852050267353758058956, 10131999921054132570217867177214052526154088901056600604382331675166926025133676879029478, 5065999960527066285108933588607026263077044450528300302191165837583463012566838439514739, 13909269013137402581858835720662039848836455726972219343626366925187786847265299854423460, 6954634506568701290929417860331019924418227863486109671813183462593893423632649927211730, 3477317253284350645464708930165509962209113931743054835906591731296946711816324963605865, 13114927659516044762036723391441281698402490467579596610484079872044528696890043116469023, 17933732862631891820322730622079167566499178735497867497772823942418319689426902192900602, 8966866431315945910161365311039583783249589367748933748886411971209159844713451096450301, 15859702248531842394385051581878318608922728185582536066973989992000635263338606182891241, 19306120157139790636496894717297686021759297594499337226017779002396372972651183726111711, 21029329111443764757552816285007369728177582298957737805539673507594241827307472497721946, 10514664555721882378776408142503684864088791149478868902769836753797120913653736248860973, 16633601310734810628692572997610369149342329076447503643915702383294615797808748759096577, 19693069688241274753650655425163711291969098039931821014488635198043363239886255014214379, 21222803876994506816129696638940382363282482521673979699775101605417736960925008141773280, 10611401938497253408064848319470191181641241260836989849887550802708868480462504070886640, 5305700969248626704032424159735095590820620630418494924943775401354434240231252035443320, 2652850484624313352016212079867547795410310315209247462471887700677217120115626017721660, 1326425242312156676008106039933773897705155157604623731235943850338608560057813008860830, 663212621156078338004053019966886948852577578802311865617971925169304280028906504430415, 11707875343451908608306395436341970191724222291109225125339769968980707480996333886881298, 5853937671725954304153197718170985095862111145554612562669884984490353740498166943440649, 14303237868736846591380967785444019265228989074485375473865726498641232211230964106386415, 18527887967242292734994852819080536349912428038950756929463647255716671446597362687859298, 9263943983621146367497426409540268174956214019475378464731823627858335723298681343929649, 16008241024684442623053082131128660804776040511445758424896695820325223202631221306630915, 19380389545216090750830909991922857119685953757430948404979131916558666942297491287981548, 9690194772608045375415454995961428559842976878715474202489565958279333471148745643990774, 4845097386304022687707727497980714279921488439357737101244782979139666735574372821995387, 13798817726025880783158232675348883857258677721386937743153175495965888708769067045663784, 6899408863012940391579116337674441928629338860693468871576587747982944354384533522831892, 3449704431506470195789558168837220964314669430346734435788293873991472177192266761415946, 1724852215753235097894779084418610482157334715173367217894146936995736088596133380707973, 12238695140750486988251758468567831958376600859294752801477857474893923385279947325020077, 17495616603249112933430248160642442696486233931355445593269712743843017033621854297176129, 20124077334498425906019493006679748065541050467385791989165640378317563857792807783254155, 21438307700123082392314115429698400750068458735400965187113604195554837269878284526293168, 10719153850061541196157057714849200375034229367700482593556802097777418634939142263146584, 5359576925030770598078528857424600187517114683850241296778401048888709317469571131573292, 2679788462515385299039264428712300093758557341925120648389200524444354658734785565786646, 1339894231257692649519632214356150046879278670962560324194600262222177329367392782893323, 12046216148502715764064185033536601740737572837189349354628084137507144005665577026112752, 6023108074251357882032092516768300870368786418594674677314042068753572002832788513056376, 3011554037125678941016046258384150435184393209297337338657021034376786001416394256528188, 1505777018562839470508023129192075217592196604648668669328510517188393000708197128264094, 752888509281419735254011564596037608796098302324334334664255258594196500354098564132047, 11752713287514579306931374708656545521695982652870236359862911635693153591158929916732114, 5876356643757289653465687354328272760847991326435118179931455817846576795579464958366057, 14314447354752514266037212603522663097721929164925628282496511915319343738771613113849119, 18533492710250126572322975228119858266158898084170883333779039964055727210367687191590650, 9266746355125063286161487614059929133079449042085441666889519982027863605183843595795325, 16009642210436401082385112733388491283837658022750790025975543997409987143573802432563753, 19381090138092069980496925293052772359216762513083464205518556005101048912768781850947967, 21066814101919904429552831572884912896906314758249801295290062008946579797366271560140074, 10533407050959952214776415786442456448453157379124900647645031004473289898683135780070037, 16642972558353845546692576819579754941524512191270519516353299508632700290323448524701109, 19697755312050792212650657336148404188060189597343328950707433760712405486143604897016645, 21225146688899265545629697594432728811328028300379733667884500886752258084053683083174413, 21988842377323502212119217723574891122961947651897936026473034449772184383008722176253297, 22370690221535620545363977788145972278778907327657037205767301231282147532486241722792739, 22561614143641679711986357820431512856687387165536587795414434622037129107225001496062460, 11280807071820839855993178910215756428343693582768293897707217311018564553612500748031230, 5640403535910419927996589455107878214171846791384146948853608655509282276806250374015615, 14196470800829079403302663653912465824383856897400142666957588334150696479385005821673898, 7098235400414539701651331826956232912191928448700071333478794167075348239692502910836949, 14925386733081139290130034839836643173393897726058104859270181089933729460828132090084565, 18838962399414439084369386346276848303994882364737121622165874551362920071395946679708373, 20795750232581088981489062099496950869295374684076630003613721282077515376679853974520277, 21774144149164413930048899976107002151945620843746384194337644647434813029321807621926229, 22263341107456076404328818914412027793270743923581261289699606330113461855642784445629205, 22507939586601907641468778383564540613933305463498699837380587171452786268803272857480693, 22630238826174823260038758118140797024264586233457419111221077592122448475383517063406437, 22691388445961281069323747985428925229430226618436778748141322802457279578673639166369309, 22721963255854509973966242919072989332013046810926458566601445407624695130318700217850745, 22737250660801124426287490385895021383304456907171298475831506710208402906141230743591463, 22744894363274431652448114119306037408950161955293718430446537361500256794052496006461822, 11372447181637215826224057059653018704475080977646859215223268680750128397026248003230911, 17062492623692477352416397456185036069535473990531498800142418346771119539495004636281546, 8531246311846238676208198728092518034767736995265749400071209173385559769747502318140773, 15641892188796988777408468290404785734681801999340943892566388593088835225855631793736477, 19197215127272363828008603071560919584638834501378541138813978302940472953909696531534329, 20974876596510051353308670462138986509617350752397339761937773157866291817936728900433255, 21863707331128895115958704157428019972106608877906739073499670585329201249950245084882718, 10931853665564447557979352078714009986053304438953369536749835292664600624975122542441359, 16842195865656093218294044965715531710324585721184753960905701652728355653469441905886770, 8421097932828046609147022482857765855162292860592376980452850826364177826734720952943385, 15586817999287892743877880167787409644879079932004257682757209419578144254349241111137783, 19169678032517815811243309010252231539737473467710198033909388716185127468156501190234982, 9584839016258907905621654505126115769868736733855099016954694358092563734078250595117491, 16168688541003323392115196178921584602232301868635618701008131185442337208021005932224836, 8084344270501661696057598089460792301116150934317809350504065592721168604010502966112418, 4042172135250830848028799044730396150558075467158904675252032796360584302005251483056209, 13397355100499284863318768448723724792576971235287521530156800404576347491984506376194195, 18074946583123511870963753150720389113586419119351829957609184208684229086974133822763188, 9037473291561755935481876575360194556793209559675914978804592104342114543487066911381594, 4518736645780877967740938287680097278396604779837957489402296052171057271743533455690797, 13635637355764308423174838070198575356496235891627047937231932032481583976853647362511489, 18194087710756023650891787961457814395546051447521593161146750022636847329408704315921835, 20473312888251881264750262907087433915070959225468865773104159017714479005686232792627008, 10236656444125940632375131453543716957535479612734432886552079508857239502843116396313504, 5118328222062970316187565726771858478767739806367216443276039754428619751421558198156752, 2559164111031485158093782863385929239383869903183608221638019877214309875710779099078376, 1279582055515742579046891431692964619691934951591804110819009938607154937855389549539188, 639791027757871289523445715846482309845967475795902055409504969303577468927694774769594, 319895513878935644761722857923241154922983737897951027704752484651788734463847387384797, 11536216789813337261685230355320147294759425370657044706383160248721949708213804328358489, 17144377427780538070146984104018600364677646187036591545722364130757030195088782798845335, 19948457746764138474377860978367826899636756595226364965391966071774570438526272034088758, 9974228873382069237188930489183913449818378297613182482695983035887285219263136017044379, 16363383469564904057898834170950483442207122650514660433878775524339697950613448643188280, 8181691734782452028949417085475241721103561325257330216939387762169848975306724321594140, 4090845867391226014474708542737620860551780662628665108469693881084924487653362160797070, 2045422933695613007237354271368810430275890331314332554234846940542462243826681080398535, 12398980499721675942923046062042931932435878667365235469648207476667286462895221174865358, 6199490249860837971461523031021465966217939333682617734824103738333643231447610587432679, 14476014157804288425035130441869259700406903168549378059942835875562876956705685928382430, 7238007078902144212517565220934629850203451584274689029971417937781438478352842964191215, 14995272572324941545563151536825841642399659293845413707516492975286774580158302116761698, 7497636286162470772781575768412920821199829646922706853758246487643387290079151058380849, 15125087175955104825695156810564987127897848325169422619409907250217748986021456163856515, 18938812620851421852151947331641020281246857664292780502235737631504929833992608716594348, 9469406310425710926075973665820510140623428832146390251117868815752464916996304358297174, 4734703155212855463037986832910255070311714416073195125558934407876232458498152179148587, 13743620610480297170823362342813654252453790709744666755310251210334171570230956724240384, 6871810305240148585411681171406827126226895354872333377655125605167085785115478362120192, 3435905152620074292705840585703413563113447677436166688827562802583542892557739181060096, 1717952576310037146352920292851706781556723838718083344413781401291771446278869590530048, 858976288155018573176460146425853390778361919359041672206890700645885723139434795265024, 429488144077509286588230073212926695389180959679520836103445350322942861569717397632512, 214744072038754643294115036606463347694590479839760418051722675161471430784858698816256, 107372036019377321647057518303231673847295239919880209025861337580735715392429349408128, 53686018009688660823528759151615836923647619959940104512930668790367857696214674704064, 26843009004844330411764379575807918461823809979970052256465334395183928848107337352032, 13421504502422165205882189787903959230911904989985026128232667197591964424053668676016, 6710752251211082602941094893951979615455952494992513064116333598795982212026834338008, 3355376125605541301470547446975989807727976247496256532058166799397991106013417169004, 1677688062802770650735273723487994903863988123748128266029083399698995553006708584502, 838844031401385325367636861743997451931994061874064133014541699849497776503354292251]
# [372992427307339981616536686110115630075342113098010788080347982669869622759400031649792, 284117116837182934114178639859989682847967251175497623662086047895218803240335140835099, 1605652832106941558090105598761930941083559723, 1020259092832776008725259110973662538898604019]
# 1475864207352419823225329328555476398971654057144688193866218781853021651529290611526242518

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Pk = []
Sk = []
c =
ma = []
for i in range(len(Pk)):
tmp = ('0 ' * len(Pk)).split(' ')[:-1]
tmp[i] = 2
tmp.append(Pk[i])
ma.append(tmp)
tmp = ('1 ' * len(Pk)).split(' ')[:-1]
tmp.append(c)
ma.append(tmp)
for i in ma:
print(i)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Pk = []
Sk = []
c =
ma = []
for i in range(len(Pk)):
tmp = ('0 ' * len(Pk)).split(' ')[:-1]
tmp = [int(i) for i in tmp]
tmp[i] = 2
tmp.append(Pk[i])
ma.append(tmp)
tmp = ('1 ' * len(Pk)).split(' ')[:-1]
tmp = [int(i) for i in tmp]
tmp.append(c)
ma.append(tmp)
ma = matrix(ma)
L = ma.LLL()
with open('/Users/wenhui/Desktop/LLL_data3333.txt', 'w') as file:
for i in L:
file.writelines(str(i) + '\n')

print('0ver')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import libnum

flag = ['1', '1', '-1', '1', '-1', '1', '-1', '-1', '1', '1', '-1', '-1', '-1', '-1', '-1', '-1', '1', '1', '1', '-1', '-1', '1', '-1', '-1', '1', '1', '-1', '-1', '-1', '-1', '-1', '1', '1', '-1', '-1', '1', '-1', '1', '-1', '1', '1', '-1', '-1', '-1', '-1', '1', '-1', '-1', '1', '1', '-1', '-1', '1', '-1', '-1', '-1', '1', '1', '1', '-1', '-1', '1', '-1', '-1', '1', '-1', '1', '1', '-1', '1', '-1', '-1', '1', '1', '1', '-1', '-1', '-1', '-1', '1', '1', '-1', '-1', '-1', '1', '1', '-1', '1', '1', '-1', '-1', '-1', '1', '-1', '-1', '-1', '1', '1', '-1', '1', '1', '-1', '-1', '-1', '1', '-1', '1', '1', '-1', '1', '-1', '-1', '1', '1', '-1', '1', '-1', '-1', '-1', '1', '1', '-1', '-1', '-1', '-1', '1', '-1', '1', '1', '-1', '-1', '1', '-1', '-1', '-1', '-1', '1', '1', '-1', '1', '1', '1', '3', '-1', '1', '1', '-3', '1', '-1', '1', '-1', '1', '1', '-1', '-1', '-1', '-1', '1', '-1', '1', '1', '-1', '-1', '-1', '1', '-1', '-1', '-1', '1', '1', '-1', '1', '-1', '-1', '-1', '-1', '1', '1', '-1', '-1', '1', '1', '-1', '-1', '1', '-1', '1', '1', '-1', '1', '-1', '-1', '1', '1', '-1', '-1', '-1', '1', '-1', '1', '1', '-1', '-1', '1', '-1', '1', '-1', '-1', '1', '1', '-1', '1', '1', '-1', '-1', '1', '1', '-1', '-1', '1', '1', '-1', '-1', '-1', '1', '1', '-1', '1', '1', '-1', '-1', '-1', '1', '1', '-1', '1', '-1', '1', '-1', '1', '1', '-1', '-1', '-1', '1', '1', '-1', '1', '1', '-1', '-1', '-1', '1', '1', '-1', '-1', '1', '1', '1', '-1', '-1', '-1', '-1', '1', '1', '-1', '-1', '1', '-1', '1', '-1', '1', '1', '-1', '-1', '1', '-1', '1', '1', '-1', '-3', '-1', '-1', '-1', '1', '-1']
tmp = []
for each in flag:
if each == '-1':
tmp.append('0')
elif each == '1':
tmp.append('1')
elif each == '-3':
tmp.append('0')
tmp = ''.join(tmp)
print(tmp)
flag = int(tmp, 2)
print(libnum.n2s(flag))
# xb5ab43-1e6f65cc8ee
# \xbdab43-1e6f65cc8ee\xa2'
# 110101001100000011100100110000011001010110000100110010001110010010110100111000011000110110001000110110001011010011010001100001011001000011011101101010110000101100010001101000011001100101101001100010110010100110110011001100011011000110101011000110110001100111000011001010110010110000010
# 1101010011000000111001001100000110010101100001001100100011100100101101001110000110001101100010001101100010110100110100011000010110010000110111
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import sys

import libnum

num = 0
with open('/Users/wenhui/Desktop/LLL_data3333.txt') as file:
for i in file.readlines():
i = i[1:-3]
i = [x for x in i.split(', ') if x]
print(i)
tmp = []
for each in i:
if each == '-1':
tmp.append('0')
elif each == '1':
tmp.append('1')
else:
break
print(len(tmp))
tmp = ''.join(tmp)
if tmp:
print(tmp)
print(len(tmp))
tmp = int(tmp, 2)
print(tmp)
flag = str(libnum.n2s(tmp))
print(flag)
if '5090ea' in flag:
sys.exit()
# 5090ea29-8cb6-4ad7


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import libnum
t = []
ct =
n = len(t)
M = Matrix.identity(n)

last_row = [0 for x in t]
M_last_row = Matrix(ZZ, 1, len(last_row), last_row)

last_col = t[:]
last_col.append(ct)
M_last_col = Matrix(ZZ, len(last_col), 1, last_col)

M = M.stack(M_last_row)
M = M.augment(M_last_col)

X = M.LLL()
print(X)
for t in X:
tmp = t[:-1]
ans = [abs(k) for k in tmp]
try:
flag = int(str(ans), 2)
print(libnum.n2s(flag))
except:
pass
print('0ver')
1
2
3
4
5
6
7
8
9
import libnum

a = "-1 -1 0 -1 0 -1 0 0 -1 -1 0 0 0 0 0 0 -1 -1 -1 0 0 -1 0 0 -1 -1 0 0 0 0 0 -1 -1 0 0 -1 0 -1 0 -1 -1 0 0 0 0 -1 0 0 -1 -1 0 0 -1 0 0 0 -1 -1 -1 0 0 -1 0 0 -1 0 -1 -1 0 -1 0 0 -1 -1 -1 0 0 0 0 -1 -1 0 0 0 -1 -1 0 -1 -1 0 0 0 -1 0 0 0 -1 -1 0 -1 -1 0 0 0 -1 0 -1 -1 0 -1 0 0 -1 -1 0 -1 0 0 0 -1 -1 0 0 0 0 -1 0 -1 -1 0 0 -1 0 0 0 0 -1 -1 -1 0 0 0 0 0 -1 0 -1 -1 0 -1 0 -1 -1 0 0 0 0 -1 0 -1 -1 0 0 0 -1 0 0 0 -1 -1 0 -1 0 0 0 0 -1 -1 0 0 -1 -1 0 0 -1 0 -1 -1 0 -1 0 0 -1 -1 0 0 0 -1 0 -1 -1 0 0 -1 0 -1 0 0 -1 -1 0 -1 -1 0 0 -1 -1 0 0 -1 -1 0 0 0 -1 -1 0 -1 -1 0 0 0 -1 -1 0 -1 0 -1 0 -1 -1 0 0 0 -1 -1 0 -1 -1 0 0 0 -1 -1 0 0 -1 -1 -1 0 0 0 0 -1 -1 0 0 -1 0 -1 0 -1 -1 0 0 -1 0 -1 0 -1 -1 0 0 0 -1 0 "
a = a.split(' ')
a = [str(abs(int(i))) for i in a if i]
flag = ''.join(a)
flag = int(flag, 2)
print(libnum.n2s(flag))
# b'5090ea29-8cb6-4ad8-ab43-1e6f65cc8eeb'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 最终版本
import libnum
t = []
ct =
n = len(t)
M = Matrix.identity(n)

last_row = [0 for x in t]
M_last_row = Matrix(ZZ, 1, len(last_row), last_row)

last_col = t[:]
last_col.append(ct)
M_last_col = Matrix(ZZ, len(last_col), 1, last_col)

M = M.stack(M_last_row)
M = M.augment(M_last_col)

X = M.LLL()
print(X)
for t in X:
tmp = t[:-1]
ans = [str(abs(k)) for k in tmp]
try:
flag = int(''.join(ans), 2)
print(libnum.n2s(flag))
except:
pass
print('0ver')

FourThousandRSA

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from Crypto.Util.number import *
from random import *

from secret import p, q, flag

d = (p - 1) * (randint(1 << 895, 1 << 905)) + getPrime(66)
assert GCD(d, (p - 1) * (q - 1)) == 1

e = inverse(d, (p - 1) * (q - 1))
n = p * q
m = bytes_to_long(flag)
c = pow(m, e, n)
lnK = [n, e, d, p, q]
for i in range(5):
lnK[i] = lnK[i].bit_length()

print(n)
print(e)
print(c)
print(lnK)
# 2008245202726111195525139787077766845460301971221282725789653525445717877831247040311792229284045975453691272797897794805042646233029706866078707630143984010874126231698685294168749255436126975986003969530103617426741064270423218259588978877370113177828293456561413806780703064713982940589926704665536293631846419385505665983693074491341550629844185026851229010312732921558017787072574777346960912025366025572718687418119633550194015169661191937337614795319500510125026882103589501497847356092372022899906904311120130529291320419495706452187192436497658895872460456299020678691633147066767550340869239242665444676015223859488181778716351439391614896237952082547346751012334359281894362102507693710804521999826603241204878074796474371682930675553715217908515291214108531394832662173298837242969662633805422396059510882443282508140025449969731242643820520540750378151812795959963934842270926945543049483993393288111252859368438315000543965899671606298852910335484127077917071912504701937501178567564695543045503695648983193718396823789188986832546133398012148358369105865469590306905583050200981598525031197740358763416786658682107838491293027639364508979821571709310278056633617824675033779928720051885352835157353803
# 807032534004084758580375189157328561548795804530942985115124520531221373527096275904469284031734054835824102563821158171589235747667599272991298059693818077176669425056991292994334793629184405818520272993874070884698385334019049156576500287497429412919772544592662544872484546264801483551861046175807498926198088282017428499839509688184982602419754320550459089738363252159087637831975525246450729834548975894498204691170246637710357850579558483403451912974355124654280116319260254145067344177881377307629659609044861901831073680528402705499960011480684401009582453074445582770870258919978732068123428866624493163278443134701482587357134070124133221075748585768453464832312107505344577054027293922365686198638830956703448628155371973969488855140627118939048137913508744817167302068674632091539914140795622964012240768679911315743790231690924423221631592930482614786389990208367405878537840797769431729477448292378308254306426728498718084148271069061132613717597098762769671154028101328451549784614737777731600209296493017630537336889457808923914655393955515432343410385118818484779667586279513209712795980030600707800342547828383384392042988707358771882529896527356417371670949948690120768388723079299981807646726911
# 1479098843223597304786742970274134598770261170942980086038287429905405158086547268458308645377797729404756116803215570224420375863682276378830919895619659050799395956146572726236750711207231799570925819982063426093862796144319017426916290208631746748701116840125309109359766050752569570197143931328071928910272144487415408708111493159410784983656461473802920988821467611079772020575539261046542193167444757825649926376069763390388540651778066220417921640963803183015067230139701713552782995724061821817700770220827885999306389960050273479873187643335537248639494631153812809968161473247467770291102906672062014528600784321726886085505174266116545186131025910553430133389924415555728463048311407897414482070647200465503078473266937663980748718243201906335338839452018573040634977122916044674440902206770428978968958675742011856119772241474589012913197944864164658153691848011206012988704668234612237127302621256390964532600110123457039129898476045860122356186227473879930882612843980001579020344087043771505157047280424063737637399280369256220373591698317585713187436849457927758798371213053969011609925655180333896843921881279342761083499824073913636798612382743862755759722932438784880987705776287623448376091072071
# [4038, 4036, 3503, 2599, 1439]

题解

NSSCTF原题,脚本小子🤔(事后具体复现)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from datetime import *
ST=datetime.now()
print('star3!')
def getC(Scale):
C=[[0 for __ in range(Scale)] for _ in range(Scale)]
for i in range(Scale):
for j in range(Scale):
if i==j or j==0:
C[i][j]=1
else:
C[i][j]=C[i-1][j-1]+C[i-1][j]
return C
def getMatrix(Scale,Mvalue,N,E,Del,Bet):
M=[[0 for __ in range(Scale)] for _ in range(Scale)]
C=getC(Scale)
X,Y=int(pow(N,Del)*(Scale+1)/2),int(pow(N,(Del+Bet))*(Scale+1)/2)
for i in range(Scale):
for j in range(Scale):
M[i][j]=N**max(Mvalue-i,0)*E**(max(i-j,0))*X**(Scale-1-j)*Y**j*C[i][j]*(-1)**j
return M
N= #见题目附件
E= #见题目附件
delta=0.01
beta=0.37
Scale=35
Mvalue=22
M=getMatrix(Scale,Mvalue,N,E,delta,beta)
M=matrix(ZZ,M)
A=M.LLL()[0]
p = []
X = int(pow(N,delta)*(Scale+1)/2)
Y = int(pow(N,(delta+beta))*(Scale+1)/2)
for i in range(Scale):
p.append(A[i]//(X**(Scale-1-i)*Y**i))
PR.<x,y>=PolynomialRing(ZZ)
f=0
for i in range(Scale):
f+=p[i]*x^(Scale-1-i)*y^i #f=p[0]*x^4+p[1]*x^3*y+p[2]*x^2*y^2+p[3]*x*y^3+p[4]*y^4
print(f.factor())
ED=datetime.now()
print(ED-ST)
#M1 Macbook Pro上运行时间为11分钟
print('0ver!')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from Crypto.Util.number import *
k = # Step 1中解出来的x的系数
dq = # Step 1中解出来的y的系数
c= #见题目附件
N= #见题目附件
e= #见题目附件
k = k+1
q = (e*dq-1)//k+1
p = N//q
print(p,q)
d = inverse(e,(p-1)*(q-1))
print(d%(q-1),d%(p-1))
print(long_to_bytes(int(pow(c,d,N))) )
# Dest0g3{1087fb88-a2da-4d21-d81a-40c6e1f105fa}

misc

当时写了部分wp,并不全,也不打算花时间写misc的wp了😈

EasyEncode

  • 爆破压缩包密码100861
  • 摩斯码
  • hex
  • py print()
  • url
  • base64

Dest0g3{Deoding_1s_e4sy_4_U}

EasyWord

原题,结束。

Web

web1

?file=php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php

web2

ctf[]=1

1
2
3
4
5
import requests
url = 'dddd'
headers = {'ctf[]': 1}
re = requests.post(url, headers)
print(re.text)

web3

POST

aaa=(~%8C%86%8C%8B%9A%92)(~%93%8c%df%d0);

aaa=(~%8C%86%8C%8B%9A%92)(~%9c%9e%8b%df%d0%99%93%9e%98);

r00t 新生赛

密码质量不高, 适合新生做

旅途中的收获

PeterCai喜欢到处旅游,体验不一样的文化,寻找历史古迹。 他在地中海旅行途中发现了一封信,封面上模糊的写着“From KS”,信的内容是一段经过处理的英文,他十分想知道含义,你能帮助他吗?

注意:单词之间用_分割,格式:r00t{This_is_what_you_get}

1
2
3
tuqh sqjxo
xuhu yi co auo
squiuh yi jxu aydw ev hecqd ucfyhu

quip

r00t{caeser_is_the_king_of_roman_empire}

物不知其数

PeterCai在之前的旅途中遇到了一些困难,他经过思考后认为是自己的经历不够丰富,所以打算加大力度。 他在旅行途中从一本中国历史书上看到了一篇图文记载,上面描述了一位远道而来的外国人在古代建筑墙壁上发现了一些文字,读完后他在一旁写下了一句话并刻下了他的名字“affine”,PeterCai了解了文字的内容,但不明白墙壁上这些单词的意思,你能理解这句话的意义吗? 注意:单词之间用_分割,格式:r00t{This_is_what_you_get}

1
2
3
今有物不知其数,三三数之剩二,五五数之剩一,七七数之剩四,问物几何?
a=
ilwzm reowzter nlekrq wc nle repdeinwkz kp mziecnkrc uwctko

CRT

1
2
3
n = [3, 5, 7 ]
m = [2, 1, 4]
print(crt(m,n)) # 11

仿射密码(爆破b)

image-20220528161229786
r00t{china_reminder_theory_is_the_reflection_of_ancestors_wisdom}

来自异乡的演讲稿

完成了在欧洲的旅行后,他来到美国寻找一份来自19世纪的一份著名演讲稿,从档案馆中获取了一份存档,由于当时需要保密,所以对演讲稿进行了处理,如今无从得知当时的处理文件的方式,你能恢复演讲稿的内容并找到隐藏的秘密吗?

格式:r00t{This_is_what_you_get}

1
ijv vs gms siugusy ci g umsgo tcqcf vgm, osnociu vrsorsm orgo igocji, jm gix igocji nj tjitscqsygiy nj ysyctgosy, tgi fjiu siypms. vs gms hso ji g umsgo agoofs-bcsfy jb orgo vgm. vs rgqs tjhs oj ysyctgos g kjmocji jb orgo bcsfy, gn g bcigf msnociu kfgts bjm orjns vrj rsms ugqs orscm fcqsn orgo orgo igocji hcuro fcqs. co cn gfojusorsm bcoociu giy kmjksm orgo vs nrjpfy yj orcn.ors kmjtsnn cn hjms chkjmogio orgi ors msnpfo.

quip

1
now we are engaged in a great civil war, testing whether that nation, or any nation so conceivedand so dedicated, can long endure. we are met on a great battle-field of that war. we have come to dedicate a portion of that field, as a final resting place for those who here gave their lives that that nation might live. it is altogether fitting and proper that we should do this.the process is more important than the result.

没思路,找不到隐藏的flag

看了其他师傅的WP,更觉得不必做了

编码的叠加态

这是给大家的一份礼物 32 hex 64 (^-^) –. keyboard

cyber

1
゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');

AAencode

1
.-- -.. .-. -....- -... .... -- -....- -. -.- ..- .... -....- .. .-.. .--. -....- - .... ..- -....- - .... ..- -....- .-.. --..--.- .--. -....- -.-- .--- .. -....- . ..-. - -....- .- -..- -.. .-- -....- .-- ... .-. -....- .--. --- -.- -....- -.. -.-. --. .-.;

morse

.--/-../.-./-....-/-.../..../--/-....-/-./-.-/..-/..../-....-/../.-../.--./-....-/-/..../..-/-....-/-/..../..-/-....-/.-../--..--.-/.--./-....-/-.--/.---/../-....-/./..-./-/-....-/.-/-..-/-../.--/-....-/.--/.../.-./-....-/.--./---/-.-/-....-/-../-.-./--./.-.

1
WDR-BHM-NKUH-ILP-THU-THU-L%ucdP-YJI-EFT-AXDW-WSR-POK-DCGR

keyboard

r00t{enjoy_yourself} or r00t{ENJOY_YOURSELF}

跨越世纪的密码学

密码学是一门研究加密和解密的学科,是数学和计算机科学的分支,具有广泛的应用性。70年前,香农发表了《保密系统和通信理论》,为密码系统建立了理论基础,从此密码学成为一门学科。从中世纪战争使用的古典密码学到近代用于加密认证的现代密码学,密码学跨越了几个世纪,造福一代又一代的人。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from Crypto.Util.number import getPrime,bytes_to_long
from flagenc import flag_e



def rsa_enc(m):
p = getPrime(2048)
q = getPrime(2048)

n = p * q
phi = (p - 1) * (q - 1)
e = 65535



c = pow(m,e,n)

return c,n,phi



if __name__ == "__main__":
m = bytes_to_long(flag_e.encode())
c,n,phi = rsa_enc(m)
print("n:",n)
print("c:",c)
print("phi:",phi)






#n=867155340496248213301586304890718046684097603182698166675357935094869339496253362770289588842444204285489236132699113244761105785116720180484908127473160802904351735800850629064863736877707929824244234773050272557962380399874645023097356433595961619408269973342343414782972781943530908494965642940923078675536492824148865191282146320931079675140981055110661956238581921591540829318228457701521519950977276253017203039999274415270059471305364104650392113681314848109146999829110097300990944278314275073793412484875105972426016431420915537338367114105764440233051064421419557616280275166082172623952244755626821427565332659159017315830404108112573513422514092211961809397683826860955333907492076319697683873070988203533060172226299654640431372636664212890855901106009335408904168663444062395560923280893905574621349215890287022016634315310170201933483641286343232522486854219001353298681437247810130313463294469449829433938014276089581871069130799778570050071269974901888486341414636683400249073904645454444221128885705910670862174811188058907878240460286507231250059471859162034722561368270784238102430157809160745418630702375154475602643880513301644310519285011767707528037046886574977679327586544694372164176809557853155542871095253
#c=391697005929552889899624830215124682575267078889079201072133494095145759579046066347252915001923189313973278571826223859645184908706427072190715810096762282243880619637348016497361444041933947882850250418927379704657622278598816689855084883059158337921836786317565166049871100026006393993288893058936739439738022130124099305108140743259731160066564274872151968129045918085079143799107277739464655582585781071099212520363988493913082922866099403377300673366747825256467038243192399767164076685852234653970502846413632195424760038541958148380660429785487390583553120274885240552255285089606977744941886013772747881926208782099692077427795179462019605178557106459296546975237531251622042718424305286207681047331067563366960995950636061474397803323838669834764420996419209392870582956326172388319536169644790216185451519917476555609250782848706670945702170334385909547448130814462907972601574007677975767368742231704088242374802664674914635640557841912213450212858885643646516543254448927591662502002704405591678642934442843031804623559824142416740069180900533516164725769842816713265524045088835470803505780159404892637737146146489585446452325219790835092436936741277597038779688278316092540356696242286837477820043838990654446689758405
#phi=867155340496248213301586304890718046684097603182698166675357935094869339496253362770289588842444204285489236132699113244761105785116720180484908127473160802904351735800850629064863736877707929824244234773050272557962380399874645023097356433595961619408269973342343414782972781943530908494965642940923078675536492824148865191282146320931079675140981055110661956238581921591540829318228457701521519950977276253017203039999274415270059471305364104650392113681314848109146999829110097300990944278314275073793412484875105972426016431420915537338367114105764440233051064421419557616280275166082172623952244755626821427565273711064097635722624828303228560977280604283312275720472893738908340485615199442472241554366592725905561371790414263688546266940109530780916523535916653049978164944441237790588358454981712188848464526040048848867904939345772067113042277048544521709018387414016554452106447169079353564720720933763588687864105154485920469108666959519751145013048856811573769466659173292069248737253417982792923468757575784464619482225159866464340115984115915768033859486388780434401618224707697523974328704810085445202274804749169121510267897644783956768255707509767680678009026141447435902688170793766234897120468408039285910787786528

RSA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import gmpy2
import libnum
n=867155340496248213301586304890718046684097603182698166675357935094869339496253362770289588842444204285489236132699113244761105785116720180484908127473160802904351735800850629064863736877707929824244234773050272557962380399874645023097356433595961619408269973342343414782972781943530908494965642940923078675536492824148865191282146320931079675140981055110661956238581921591540829318228457701521519950977276253017203039999274415270059471305364104650392113681314848109146999829110097300990944278314275073793412484875105972426016431420915537338367114105764440233051064421419557616280275166082172623952244755626821427565332659159017315830404108112573513422514092211961809397683826860955333907492076319697683873070988203533060172226299654640431372636664212890855901106009335408904168663444062395560923280893905574621349215890287022016634315310170201933483641286343232522486854219001353298681437247810130313463294469449829433938014276089581871069130799778570050071269974901888486341414636683400249073904645454444221128885705910670862174811188058907878240460286507231250059471859162034722561368270784238102430157809160745418630702375154475602643880513301644310519285011767707528037046886574977679327586544694372164176809557853155542871095253
c=391697005929552889899624830215124682575267078889079201072133494095145759579046066347252915001923189313973278571826223859645184908706427072190715810096762282243880619637348016497361444041933947882850250418927379704657622278598816689855084883059158337921836786317565166049871100026006393993288893058936739439738022130124099305108140743259731160066564274872151968129045918085079143799107277739464655582585781071099212520363988493913082922866099403377300673366747825256467038243192399767164076685852234653970502846413632195424760038541958148380660429785487390583553120274885240552255285089606977744941886013772747881926208782099692077427795179462019605178557106459296546975237531251622042718424305286207681047331067563366960995950636061474397803323838669834764420996419209392870582956326172388319536169644790216185451519917476555609250782848706670945702170334385909547448130814462907972601574007677975767368742231704088242374802664674914635640557841912213450212858885643646516543254448927591662502002704405591678642934442843031804623559824142416740069180900533516164725769842816713265524045088835470803505780159404892637737146146489585446452325219790835092436936741277597038779688278316092540356696242286837477820043838990654446689758405
phi=867155340496248213301586304890718046684097603182698166675357935094869339496253362770289588842444204285489236132699113244761105785116720180484908127473160802904351735800850629064863736877707929824244234773050272557962380399874645023097356433595961619408269973342343414782972781943530908494965642940923078675536492824148865191282146320931079675140981055110661956238581921591540829318228457701521519950977276253017203039999274415270059471305364104650392113681314848109146999829110097300990944278314275073793412484875105972426016431420915537338367114105764440233051064421419557616280275166082172623952244755626821427565273711064097635722624828303228560977280604283312275720472893738908340485615199442472241554366592725905561371790414263688546266940109530780916523535916653049978164944441237790588358454981712188848464526040048848867904939345772067113042277048544521709018387414016554452106447169079353564720720933763588687864105154485920469108666959519751145013048856811573769466659173292069248737253417982792923468757575784464619482225159866464340115984115915768033859486388780434401618224707697523974328704810085445202274804749169121510267897644783956768255707509767680678009026141447435902688170793766234897120468408039285910787786528
e = 65535
d = int(gmpy2.invert(e, phi))
m = int(pow(c,d,n))
print(libnum.n2s(m))
"""
ciphertext: 3b077dac356951871140411750f5e40180c342144975f9abc0070ca53f874e17935d632facadbaa88b14f4ad78599a96a2934ab2588bbbe4556c98489e64ba58
Encrypt Method: AES
Key: 1732050807ª»ÌÝîÿ
IV: 0000000000000000
Mode: ¥¶Ç
Notice: key is 16-digits numeric character.
key's md5: 2116f08e96a6f9090e90c13bd28a3d15
"""

md5爆破key

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from itertools import product
import hashlib
table = [chr(i) for i in range(48, 58)]
for i in product(table, repeat=6):
i = ''.join(list(i)).encode()
i = b'1732050807' + i
m = hashlib.md5()
m.update(i)
print(i)
des = m.hexdigest()
if '2116f08e96a6f9090e90c13bd28a3d15' == des:
print(i)
print('key!')
sys.exit()
# 1732050807902831

AES解密(除了ECB外挨个把模式试一遍)

1
2
3
4
5
6
7
8
9
10
from Crypto.Cipher import AES
import base64
iv = b'0000000000000000'
key = b'1732050807902831'
c = '3b077dac356951871140411750f5e40180c342144975f9abc0070ca53f874e17935d632facadbaa88b14f4ad78599a96a2934ab2588bbbe4556c98489e64ba58'
c = base64.b16decode(c.upper()) # 十六进制转字符
flag = AES.new(key, AES.MODE_CFB, iv)
flag = flag.decrypt(c)
print(flag)
# b'r00t{a_small_step_on_cryptography_one_giant_leap_for_mankind}'